博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Session
阅读量:5101 次
发布时间:2019-06-13

本文共 1760 字,大约阅读时间需要 5 分钟。

Session默认通过文件形式存储

当用户访问首次服务端时(不管你是否访问session)都会自动生成一个PHPSESSID 并存入Cookie 键名为PHPSESSID

存的一个a0rj6402d7v7qgk62k76nkiha2这种值
可以直接 echo $_COOKIE['PHPSESSID']; 查看此值
这个值有什么用呢?

这个值就是服务端session文件的文件名 ( 去掉sess_部分 )

当你访问服务端则自动生成一个PHPSESSID 这时服务端的对应session文件并不存在
而是当你首次执行session_start();时根据之前生成的PHPSESSID值自动创建一个session文件
文件名为: sess_加上之前生成的PHPSESSID值 : sess_a0rj6402d7v7qgk62k76nkiha2

当以后设置或读取session时

都会将此PHPSESSID值发送给服务器到服务器的session目录下找到对应的session文件进行操作
为什么关闭浏览器后$_SESSION中值会消失?

上面说到每次操作session都会把PHPSESSID传给服务器 然后到服务器的session目录下寻找对应session文件

PHPSESSID是存于Cookie中的 默认是没设置有效时间的
也就是关闭浏览器后就自动删除了PHPSESSID
所以当下次在打开浏览器时无法找到PHPSESSID
如果PHPSESSID不存在了 则会自动重新分配一个新的PHPSESSID
所以之前的$_SESSION中的值就找不到了

也就是说每一次会话(重新打开浏览器为一次会话)会产生一个新的PHPSESSID

也就会重新创建一个以新PHPSESSID命名的session文件 之前的session不再继续使用

那么如果我们手动去设置PHPSESSID的有效期呢

这样不就可以在下次重新打开浏览器时仍然可以找到PHPSESSID么

setCookie(session_name(),session_id(),time()+86400);

这样当关闭浏览器后 下次访问时仍然可以找到PHPSESSID 也就可以继续访问到$_SESSION中的值了

session_name() 表示sessionid的名字 也就是 PHPSESSID

session_id() 表示sessionid的值 也就是 $_COOKIE['PHPSESSID']的值

也可以通过 session_set_cookie_params(800); 函数设置session有效期 单位秒

放在 session_start(); 之前执行

当然你也可以把这个PHPSESSID值存入数据库

然后通过session_id($sessionid);设置PHPSESSID
客户端禁用了Cookie

其实这种用户可以直接忽略掉

禁用Cookie则无法存储PHPSESSID 所以每次都会因为找不到PHPSESSID 自动重新分配新的PHPSESSID

如果你理解了上面几段话 应该能想出解决办法

删除session

删除单个session

unset($_SESSION['xmg']);

删除所有session ( 删除当前内存中的所有session值 但不会删除session文件和释放sessionid )

session_unset();

释放此次会话的全部资源 ( 删除session文件 释放sessionid 但不会释放内存中的$_SESSION值 )

session_destroy();

也就是说执行session_unset()后就立即无法在访问$_SESSION中的数据了

而执行session_destroy()不会释放内存中的$_SESSION值 $_SESSION在本线程仍然可以访问

所以如果想删除所有session 执行 :

session_unset();
session_destroy();

不要尝试这样删除session : unset($_SESSION); 没这种写法 也删不掉session

转载于:https://www.cnblogs.com/xin-jun/p/8461592.html

你可能感兴趣的文章
如何制作并更改项目icon文件
查看>>
设计模式:迭代器模式(Iterator)
查看>>
cmd批处理常用符号详解
查看>>
关于给构造函数传达参数方法
查看>>
mysql忘记密码时如何修改root用户密码
查看>>
python基础知识(day3)
查看>>
加/减/乘/除 下的取余
查看>>
TexturePacker的使用(图片打包再一起)
查看>>
STM32单片机使用注意事项
查看>>
在linux中出现there are stopped jobs 的解决方法
查看>>
获取浏览器版本信息
查看>>
SQLServer之删除视图
查看>>
js forEach跳出循环
查看>>
MyBatis---动态SQL
查看>>
快速创建一个 spring mvc 示例
查看>>
swing入门教程
查看>>
报错:bash: pip: command not found
查看>>
好莱坞十大导演排名及其代表作,你看过多少?
查看>>
JVM-class文件完全解析-类索引,父类索引和索引集合
查看>>
Loj #139
查看>>