想问问关于 php 退出登录时的 sesssion 问题

2016-01-24 17:47:41 +08:00
 sensui7
我现在退出时, 清除 session, 清楚 cookies, 然后重建 session, 写入一些信息, 重定向到首页.

然而重建 session 之后, 新的 session id 并没有发送到客户端, 重定向到其他页面后, 由于没有 session id, 就会自动重建新的 session, 这样之前写入的信息就没有了.

一个很二的解决办法是在重定向之前, 刷新一下浏览器, 这样客户端就得到 session id 了.

我想问问, 这个要如何解决? 我看了一些其他的 codeigniter 用户模块的库文件, 发现好像并没有什么特别的地方, 难道是我写的程序逻辑有问题吗?
1785 次点击
所在节点    问与答
8 条回复
haiyang416
2016-01-24 18:01:31 +08:00
登录后写入的 session 内容是什么?可以保留 session id 只清空需要移除的内容
sensui7
2016-01-24 18:20:56 +08:00
@haiyang416 倒也没什么敏感的东西, 这确实是个办法, 但是这个问题碰到了, 不解决, 很闹心. 我折腾挺长时间了,
sensui7
2016-01-24 19:37:19 +08:00
大神救我
haiyang416
2016-01-24 21:17:38 +08:00
@sensui7 session id 对于客户端来说也是一个 cookie,对 http 协议来说只是一个 header ,重定向也只是一个 header ,所以你只需要在服务端重新生成一个 Sid ,然后以 header 发送到客户端即可。
guoer
2016-01-24 21:42:07 +08:00
redirect('index');前加个
```
header('set-cookie:' . session_id());
```
试试
ChoateYao
2016-01-24 21:53:39 +08:00
这个问题有一个解决方案,就是你`logout`之后会清除各种`session`,那么你在重新给 session 赋值的时候,顺便刷新 session_id ( session_regenerate_id )就可以解决这个问题了。

这是 PHP 本身的问题。
micate
2016-01-24 23:15:16 +08:00
如果信息量很小且没有敏感性,可以附加到跳转的 URL 中,在跳转到的地方从 URL 中获取。
sensui7
2016-01-25 15:08:12 +08:00
@guoer 这方法好使, 后续访问页面, 会添加一个额外的键名为空的 cookies, 值为 session id

@ChoateYao perfect. 完美的解决了, 只需要 session_regenerate_id()就可以了, 一直忽略了这个函数能发送新 id 的功能. 总是把它当成一个生成 id 的函数. 感谢.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/253040

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX