|
编写web应用的时候, 用户登录这块肯定是少不了的, 大家应该看到过很多大的网站及应用 登录表单中有一个 "记住登录状态" 的选项, 很显然这个功能能给应用的使用者带来方便, 他只要勾选"记住登科状态"登录一次, 以后就不要填写用户名密码 直接就可以登录到应用了, (当前前提是不在应用中主动退出)
下面我给将一下 如何在 CI 中使用 session 类 来实现这个"记住登录状态" ;
注: 以下描述仅提供一种解决方法, 并非是唯一的,而且关键还在于开发者自身对这个功能的理解, 否则解释清楚还是有麻烦的,
Ci 中的 session 类使用是很方便的, 我看过很多开发者为了方便, 往往 在autoload 定义 session 类为 自动载入; 方便在 整个Ci 超类下使用;
Ci session 会话机制也是创建 cookie 然后 加密存储在本地(或数据库中) , 读取时把cookie 解码出来, CI session 类支持多个 session (关于多session的应用以后会写文章, 可以解决网站前台用户,后台用户等,比较方便; ) 默认的 Ci session 类他只能定义失效时间(设定cookie失效时间,失效后 cookie 就会被本地浏览器自动删除了) , 要实现"记住登录状态" 我们需要对 session 进行动刀改造; 根据 CI 的运作机制, 我们可以复制一个 session.php 到 application / libraries 下 这样就会覆盖system/libraries 下的 session.php , 我可以对 application / libraries /session.php 进行改造, 来实现 "记住登科状态" 的实现;
以下是为实现这个而需要改造的地方:
session.php
定义 $sess_always_time = 63072000 ; // 2年的描述
在 _set_cookie 这个函数中, 加入
if (!empty($cookie_data['remember_me'])) {
$this->sess_expiration_time = $this->now + $this->sess_always_time;
}
//这个意思是 如果 我们登录时 选择 了 记住登科状态 (remember_me) , 那么 在 session 初始化时 如果发现 remember_me 时, 将 cookie 到期时间设定为 当前时间+ 2年 后失效;
关键在于 remember_me 这个, 在 登录时, 我们可以根据用户是否选择 "记住登录" 来讲 remember_me 保存到 session 中, 如果session 中有 remember_me 那么 根据上面的代码 就可以达到 cookie 永不过期, 这样也就实现了 "记住登录"
// Set the cookie
setcookie(
$this->sess_cookie_name,
$cookie_data,
$this->sess_expiration_time,
$this->cookie_path,
$this->cookie_domain,
0
);
以上只是 解决方法, 具体实现代码, 可根据实际应用进行调整; |
|