一:什么是Session?
Session是一个会话级别的数据存储,数据保存在服务器端,在整个会话过程中,保存在session中的数据都会存在;session会在会话结束或者浏览器关闭时或者是session有效期到期时失效;
Cookie是服务器发送到客户浏览器,并保存在本地的数据,它会在浏览器下次访问服务器时,被一块带过去;通常会用来告知服务器该请求是否来自同一个浏览器,记录用户是否登录等;
二:为什么需要Cookie和Session?
因为浏览器是无状态的(http协议是无状态),浏览器并不知道是谁在跟服务器联系,这个时候就需要一个机制来告诉服务器,是谁在操作浏览器,操作人是否登录等,要实现这个机制,就需要cookie和session配合完成;
当用户第一次访问服务器时,服务器需要用到sesson时,可以选择创建/生成session,然后服务器会给客户端响应中携带sessionId,浏览器接收到这个sessionId后,保存在cookie中,同时cookie记录此sessionId属于哪个域名;
用户再次访问服务器时,请求会自动判断此域名下是否用cookie信息,如果存在cookie,则将cookie发送给服务器,服务器解析cookie拿到sessionId,然后根据sessionId从sesson容器中查询到对应的session信息,如果能找到session信息,则可以执行后面的操作,如果没有则说明没有登录或者登录已经失效;
每个不同用户的请求,它得到的session是不一样的!
sessionId是联系cookie和session的桥梁,很多系统也是通过这个来判断用户是否登录;
三:Cookie和Session的区别?
存储位置不同:cookie保存在客户端浏览器,session保存在服务器端;
存取方式不同:cookie只能保存ASCII(是基于拉丁字母的一套电脑编码系统),session能保存任意数据类型;
这意味着cookie不能储存中文字符串,而session可以储存对象或者是中文字符串等任意数据类型
有效期不同:cookie中的数据可以长时间存在,session会在会话结束或者浏览器关闭时或者是session有效期到期时失效;
数据安全性不同:因为cookie是保存在浏览器中的,数据安全性相对较差,容易被窃取;session是存储在服务器端的,安全性相对较高,一般不会无法被窃取;
存储大小不同:cookie一般保存的数据大小不会超过4K;而session理论上来说没有限制;