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

[库 Library] 方便易懂易用的ci的第三方session类

[复制链接]
发表于 2008-3-14 10:12:15 | 显示全部楼层 |阅读模式
首先声明我很懒,再次我很笨,最后说明我很菜。
ci自带的session类是使用cookie保存的。而且在config.php里无法设置关闭浏览器后登录状态及时失效。这就给我这样的习惯使用php自身的菜鸟造成了不便。php自身的session,是在关闭浏览器后登录状态就失效的(群里有大牛指出是创建了新的会话,不管怎样你不再次登录就进不了。),这样也就比较的安全,因为有些用户习惯直接关闭浏览器,而不是点击我们给他的链接“退出登录”。这样就有个问题,使用ci自带的session类时,如果只是关闭浏览器,登录状态却依然保留,留下了安全隐患。于是我开始寻找第三方的session lib。有个ob session 说有这样的功能的,使用方法也和ci自带的session类似,但是,我测试没有通过。而且他的配置和ci自带的配置有些不一样,比如ci的session里 $config['sess_expiration']=0 就是不过期,而ob session这样设置就是关闭浏览器后就失效。db session是把他放到db里对我也不是适用。最后我找到了phpsession,他本身的说明就提到了他是用的php的session。
他的用法很简单。
构造函数里加载(也可以autoload)
PHP复制代码
$this->load->library('phpsession');
复制代码

接着就可以使用他的方法了。
创建一个session:
PHP复制代码
$this->phpsession->save('foo','bar');//第一个参数是session名,第二个是值。
复制代码

读取一个session:
PHP复制代码
$foo = $this->phpsession->get('foo');
复制代码

删除一个session:
PHP复制代码
$this->phpsession->clear('foo');
复制代码

删除所有session
PHP复制代码
$this->phpsession->clear();
复制代码

MuMu觉得比较简单,比较自由了

文件放到 application\libraries

[ 本帖最后由 kissmumu 于 2008-3-14 10:36 编辑 ]

phpsession.zip

881 Bytes, 下载次数: 237

评分

参与人数 1威望 +5 收起 理由
Hex + 5 精品文章

查看全部评分

发表于 2008-3-14 10:30:51 | 显示全部楼层

楼主为什么无视我的回帖??

session销亡和浏览器关闭与否没有关系
session信息保留在服务器上,http虽然是使用面向链接的tcp/ip但是每次请求结束后都会关闭tcp链接
所以你只要不发送request你在客户端随便怎么折腾都不会影响到服务器端

问题是服务器如何辨别客户端来的请求对应那个用户?使用session id
有几种方法,表单提交,直接写在链接上,或者使用cookie。
一般都用cookie来实现

为啥有些浏览器关了再次打开还是找到session
cookie分两种,保留在内存中的临时cookie或者保存在磁盘上,一般主流浏览器都使用临时cookie,关闭浏览器后临时cookie自然被清掉,自然就找不到了,但如果保留在磁盘上,那就不是了。
ci默认写cookie,所以。。
setcookie的代码去掉就可以了

概念性的东西?有人反驳吗?
 楼主| 发表于 2008-3-14 10:39:18 | 显示全部楼层
2楼,可以是写个示例代码教我怎样用ci的session类时,在登录后关闭浏览器,然后直接输入url后,提示拒绝进入么。
虚心求教,不是挑衅和反驳。谢谢
发表于 2008-3-14 11:19:05 | 显示全部楼层
你要达到你说的那种效果为什么不直接操作
$_SESSION
php自身多带的肯定比第三方的库类强大稳定吧
 楼主| 发表于 2008-3-14 12:08:33 | 显示全部楼层
原帖由 kkito 于 2008-3-14 11:19 发表
你要达到你说的那种效果为什么不直接操作
$_SESSION
php自身多带的肯定比第三方的库类强大稳定吧

我是为了代码看上去更统一,更美观,更和谐。
发表于 2008-3-18 02:17:29 | 显示全部楼层
这样看起来有点像脱裤子放*

2F..个人认为只用COOKIE保存不好之处是当用户关闭COOKIE时就出会问题了
虽然一般情况下用户不会关闭COOKIE
发表于 2008-3-18 07:15:27 | 显示全部楼层
用cookie的另外一个问题是4KB的文件尺寸限制。
发表于 2009-1-16 18:41:47 | 显示全部楼层
我在本地的ci(1.7)中用了下,在同一个控制器下定义的两个方法,一个方法设置session另一个读取的时候怎么是空的?
function mym()
{
  $this->load->library('phpsession');
  $this->phpsession->save('my','123456');
  $ss= $this->phpsession->get('my');
  echo $ss;//输出:123456
}
function my()
{
  $this->load->library('phpsession');
  $ss= $this->phpsession->get('my');
  echo $ss;//空白页面
}

[ 本帖最后由 097633 于 2009-1-16 18:44 编辑 ]
发表于 2009-1-17 02:05:56 | 显示全部楼层
看看是不是过期了?或者已经超出一个会话了?
发表于 2009-1-17 11:24:52 | 显示全部楼层
怎么调试?

本版积分规则