用户
 找回密码
 入住 CI 中国社区
搜索
查看: 12085|回复: 16
收起左侧

[会话/Cookie] CI中实现 记住登录状态功能

  [复制链接]
发表于 2010-8-15 21:15:15 | 显示全部楼层 |阅读模式
编写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
);


以上只是 解决方法, 具体实现代码, 可根据实际应用进行调整;
发表于 2014-7-24 17:09:04 | 显示全部楼层
CI是开发框架,功能需要自己开发。
发表于 2014-7-11 21:05:42 | 显示全部楼层
:lol:lol:lol:lol:lol
发表于 2016-5-24 11:30:51 | 显示全部楼层
3333333333333
发表于 2012-7-18 20:07:11 | 显示全部楼层
有几个人回复呢/?????
发表于 2012-8-13 16:49:25 | 显示全部楼层
1111111111
发表于 2012-8-14 17:02:03 | 显示全部楼层
{:soso_e178:}
发表于 2012-8-15 18:31:22 | 显示全部楼层
坑爹呀
发表于 2012-8-17 18:04:51 | 显示全部楼层
256269683 PHP CI框架 CodeIgnite交流群
发表于 2012-10-14 21:43:06 | 显示全部楼层
怎么没有内容
发表于 2012-10-16 10:56:52 | 显示全部楼层
内容呢?
发表于 2012-10-24 18:14:03 | 显示全部楼层
发表于 2013-12-28 14:42:39 | 显示全部楼层
有没有呢

本版积分规则