session和cookie的区别与联系

session存在服务器 cookie存在浏览器 sessionid存在cookie里。

服务器通过浏览器访问请求中附带的cookie中的sessionid去查服务器中的session。

而session里面的东西浏览器是不知道的。浏览器只知道sessionid。

扩展

php的sessionid叫PHPSESSID java的叫jsessionid 这个没关系 通过配置文件或者各种方式可以随便改。但是必须要有。

session在php或者java里面默认是存储在服务器内存上的,而如果有分布式后端这会造成各个服务器的session内数据不统一,所以有将session存在redis的做法从而实现拓展。

特殊情况下可能存在session丢失的问题。比如服务器内存满,服务器重启等。session本身在配置里也有过期时间,过期就删掉了,不然很快内存就炸啦!

session的存在意义是因为http的无状态性。如果浏览器请求时cookie没有sessionid,服务器无法分辨这是任何一个用户发出的请求。

也就是说如果黑客偷到了你的cookie,也就是你的sessionid,他就可以伪装你跳过你的密码直接操作你的账户(如果服务器没有做ip验证的情况)。这也是新浪微博经常有莫名其妙的关注的原因之一,ISP偷窥了你的sessionID。(还有一种方法是插入自动关注的js脚本) HTTPS能较为有效地防范这种攻击。

session无法使用时的临时解决方案:过去有部分浏览器,尤其是手机浏览器不支持cookie,这时候sessionid往哪里存呢?解决方案是在所有网址后加上sessionid(可能叫做token),这也是wap时代部分网站告诉你不要随便复制网址给别人的原因!因为他一点开登陆的就是你的账户!:D

在LNMP(linux+nginx+mysql+php)的架构下,存session的并不是nginx服务器 因为nginx服务器是HTTP服务器是无状态的。负责管理session和sessionid的是php服务器哦。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

This site uses Akismet to reduce spam. Learn how your comment data is processed.