如果cookie禁用了,session还能用吗,为什么
形象的给你描述下这个问题:
http请求是无状态的。。假如你是浏览器,我是服务器,那么类似你知道我的电话号码,可以给我打电话,但是我不知道你的电话号码,我想和你说话只能等你跟我打。。
那么问题来了,如果你想让我相信你就是昨天给我打电话的那个人必须借助一个新的东西,比如你给我打电话的时候我给你一串数字,你下次打给我告诉我这串数字我就知道你是谁了,这串数字在我这里存的就叫session(可以简单这么理解),你自己也存了一份,那份叫cookie。你以后给我打电话顺便把这个cookie给我就可以了。这个就是session和cookie的原理。
所以了,假如你要禁用cookie,通过cookie把那串数字给我就不行了。那你也可以把这串数字放在url后面给我,或者放到form表单里给我,那也是可以的。
恩,就是这样了。。不知道你有没有理解。。
通常情况下 Cookie 里记录了 Session 的 id ,所有 Cookie 被禁用了也就意味着 Session 失效了。不过 Session id 还有另外一种传递方式,就是在 URL 查询中携带 Session id (既把所有的URL里都带上Session id的参数,如: http://xxx/index?sid=...)。不够这种方法比较麻烦(所有的链接都要带上),而且比较容易丢失 Session id(地址可以认为修改去掉ID),所有只是作为备选方案,在 Cookie 不能使用的环境下可以作为替代。
在php里面,session_id是每个会话的唯一id,它默认被保存到cookie中,请求时,根据cookie里面的session_id来识别会话。
但可通过trans_sid设置(在编译时或php.ini)文件中,对其进行修改。修改后,session_id能脱离cookie而存在,不同点在于,使用cookie时,从cookie中获取session_id,而不使用cookie时,session_id会跟在url后面(PHP自动干这事情)
2 回答3.1k 阅读✓ 已解决
1 回答1.4k 阅读✓ 已解决
1 回答1k 阅读✓ 已解决
1 回答1.3k 阅读✓ 已解决
3 回答1.2k 阅读
2 回答1.2k 阅读
1 回答1.2k 阅读
常见的session实现方式是基于cookie的, 所以禁用cookie,session随之时效
理论上只要在返回的页面里里能带上一个标识会话的令牌,在浏览器下一次提交的时候,能带上这个令牌,会话就可以被保持
因此,cookie只是最优雅的实现session的方式,因为cookie对用户来说不可见,同时会自动在HTTP报文中传输
但session也可以通过其他方式来保持, 比如放一个sessionId在URL的参数里 :)