方便易懂易用的ci的第三方session类
首先声明我很懒,再次我很笨,最后说明我很菜。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)
$this->load->library('phpsession');
接着就可以使用他的方法了。
创建一个session:
$this->phpsession->save('foo','bar');//第一个参数是session名,第二个是值。
读取一个session:
$foo = $this->phpsession->get('foo');
删除一个session:
$this->phpsession->clear('foo');
删除所有session
$this->phpsession->clear();
MuMu觉得比较简单,比较自由了
文件放到 application\libraries
[ 本帖最后由 kissmumu 于 2008-3-14 10:36 编辑 ]
楼主为什么无视我的回帖??
session销亡和浏览器关闭与否没有关系session信息保留在服务器上,http虽然是使用面向链接的tcp/ip但是每次请求结束后都会关闭tcp链接
所以你只要不发送request你在客户端随便怎么折腾都不会影响到服务器端
问题是服务器如何辨别客户端来的请求对应那个用户?使用session id
有几种方法,表单提交,直接写在链接上,或者使用cookie。
一般都用cookie来实现
为啥有些浏览器关了再次打开还是找到session
cookie分两种,保留在内存中的临时cookie或者保存在磁盘上,一般主流浏览器都使用临时cookie,关闭浏览器后临时cookie自然被清掉,自然就找不到了,但如果保留在磁盘上,那就不是了。
ci默认写cookie,所以。。
setcookie的代码去掉就可以了
概念性的东西?有人反驳吗? 2楼,可以是写个示例代码教我怎样用ci的session类时,在登录后关闭浏览器,然后直接输入url后,提示拒绝进入么。
虚心求教,不是挑衅和反驳。谢谢 你要达到你说的那种效果为什么不直接操作
$_SESSION
php自身多带的肯定比第三方的库类强大稳定吧 原帖由 kkito 于 2008-3-14 11:19 发表 http://codeigniter.org.cn/forums/images/common/back.gif
你要达到你说的那种效果为什么不直接操作
$_SESSION
php自身多带的肯定比第三方的库类强大稳定吧
我是为了代码看上去更统一,更美观,更和谐。:lol 这样看起来有点像脱裤子放*:lol :lol
2F..个人认为只用COOKIE保存不好之处是当用户关闭COOKIE时就出会问题了
虽然一般情况下用户不会关闭COOKIE 用cookie的另外一个问题是4KB的文件尺寸限制。 我在本地的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 编辑 ] 看看是不是过期了?或者已经超出一个会话了? 怎么调试?:Q