session | cookie | |
存放数据位置 | 存放在服务器端,存放数据,session是由服务器维持的一个服务器存储空间。 | cookies属于session对象的一种,但不占用服务器资源,存在客户端内存或一个cookie的文本文件中。 |
进程 | 浏览器发送请求,服务器自动生成一个session和session id来标识这个session,将响应发送到浏览器 | 浏览器请求时,将用户一起发给服务器,变量由一定的特殊标记,服务器解释为cookie变量,不关闭浏览器cookie变量就一直有效 |
存储使用 | 1.服务器在一定时间内(默认30min)保存这个session。过了时间限制就销毁。销毁前,程序员可以将用户的一些数据以key,value形式暂时存放在这个sess中。——减轻服务器压力。 2.也有使用数据库将这个session序列化之后保存起来的,没了时间限制,但是数据库容量会不足,服务器压力大 | session客户端实现形式: 1.cookie保存,设置cookie将session id发送到浏览器。不设置过期时间时cookie将不存在在硬盘上,浏览器关闭,cookie消失,session id就丢了。 设置时间,cookie会保存在客户端硬盘中,浏览器关闭也不影响,下次访问网站时,同样会发送到服务器上。 2.使用URL附加信息的方式,也就是像我们经常看到JSP网站会有aaa.jsp?JSESSIONID=*一样的。这种方式和第一种方式里面不设置Cookie过期时间是一样的。 3.页面表单增加隐藏域,和第二章一样。前者get发送数据,后者post发送数据。后者较为麻烦。 |
数据在服务器上,不能伪造信息 | 浏览器使用cookie,数据在浏览器端,别人会冒充。不安全 | |
用户链接服务器时,会由服务器生成一个唯一的session id作为标识符来存取服务器端的session存储空间。此session id是用cookie保存在客户端的,用户提交页面时,会将这个session id提交到服务器端来存取session数据。 如果客户端禁用cookie,那么session也会失效。 禁用后也可以用重写URL的方式来传递session的值,cookie禁用,服务器可以自动通过重写url方式来保存session的值,此过程对程序员透明。 可以试一下,即使不写Cookie,在使用request.getCookies();取出的Cookie数组的长度也是1,而这个Cookie的名字就是JSESSIONID,还有一个很长的二进制的字符串,是SessionID的值。 | ||
使用原则 | 任何重要数据,最好通过加密形式来保存数据(最简单的可以用URLEncode,当然也可以用完善的可逆加密方式,遗憾的是,最好不要用md5来加密)。 是否保存登陆信息,需有用户自行选择。 长于10K的数据,不要用到Cookies。 也不要用Cookies来玩点让客户惊喜的小游戏。 | |
典型应用 | 1.判断用户是否登录过网站,以便下次登录可以直接登录。如果删除,每次登录时需要重新填写登录的相关信息。 2.’购物车’中类的处理和设计,将用户浏览的不同商品都写入cookie,付款时从cookie中提取这些信息。(需要考虑安全和性能问题) | |
Session与Cookie的区别与联系
最新推荐文章于 2022-04-12 14:46:02 发布