`
荧火流年
  • 浏览: 60777 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

session和cookie到底是怎么回事

阅读更多

而对于web应用程序,是通过http协议来传输数据的,HTTP协议又是无状态的,所以当http请求交毕,客户端与服务端的连接就会断开,由于http协议是无状态的,所以又无法通过连接来追踪会话信息,所以就引入了cookie来弥补这一不足之处。

 

当用户访问一个网站时,服务器需要记录该用户的身份信息,就可以通过response将用户信息设置在cookie当中,通过客户端浏览器将cookie保存起来,将该浏览器访问服务器里,浏览器会将网址和cookie一同发给服务器,然后服务器来检查用户的身份信息。同时,服务器还有权力修改cookie。

 

查询某网站的cookie信息很简单,只需要在地址栏里面输入javascript:alert(document.cookie)

 

cookie具有不可跨域性,浏览器判断的依据是域名。

 

cookie常用属性中有一个叫做secure,这个属性主要用来设置该cookie是否仅仅被使用在安全协议传输,安全协议有HTTPS,SSL等,在网络上传输前要加密,默认值为false,但cookie内容不会被加密,所以为了保险起见,可以先进行手动加密,然后再通过安全协议传输,如果将secure设为true,那么就只能在安全协议中传输。

 

第二个很重要的属性maxAge,主要用来设置cookie的有效期。

当它为正数时,浏览器会将该cookie持久化到文件当中。

当它为负数时,是临时cookie,浏览器会将该cookie存入浏览器内存当中。

当它为0时,表示删除,cookie没有专门的删除方法,只有通过setMaxAge(0)来删除cookie,这时会将cookie从浏览器内存中删除。

 

第三个属性:path,它是用来设置cookie的访问路径的,例如:cookie.setPath("/session/");注意必须要以"/"结尾,设置为“/"时,允许所以路径来使用该cookie,页面只能获取到它属于的Path的cookie,例如/session/test/a.jsp不能获取到路径/session/abc/下面的cookie.

 

response所提供操作cookie的方法只有一个add(Cookie cookie),如果要修改某个cookie的值,只要使用同名的cookie将其覆盖。如果要删除某个cookie,只需要新建一个同名的cookie,然后将有效期设为0,将原来的cookie覆盖掉就达到了删除的目地。注意:新建的cookie,domain,path,name等都要一样,否则浏览器将认为是两个不同的cookie。

JSESSIONID是Tomcat生成的。

 

Session也是一种会话跟踪机制,不同的是,session存储在服务端,而cookie存储在客户端,为了提高访问速度,服务器一般会将session放在内存中,所以如果有更多的用户去访问,而没有得到及时清理,就会导致内存溢出,解决方案

1,可以通过setMaxInactiveInterval(long interval)来设置它的过期时间。注意:单位是(s)

2,在web.xml中进行设置。

 

<!-- timeout单位是分钟 -->
<session-config>
      <session-timeout>60</session-timeout>
</session-config>
 

 

3,也可以通过Session的invalidate()来使session失效。

 

虽然说session保存在服务端,对客户端来说是透明的,但是还是需要cookie的支持,因为HTTP协议是无状态的,session无法通过http来判断是否为同一客户,因此服务端要向客户发送一个JSESSIONID来标识这个session,也就是我们所说的sessionid,可以通过HttpSession.getId()来获得。另外,cookie有效期的默认值为-1,所以session关闭浏览器就会失效。

 

对于移动互联网方向,wap的开发,大部分浏览器都不支持cookie,所以都会采用URL地址重写来跟踪用户会话信息,比如支付宝公司的awid就是一个体现。即然大部分浏览器都不支持,那么可以直接在session中禁用cookie,可以在context.xml文件中这样配置:

<?xml version='1.0' encoding="UTF-8" ?>
<Context path="/session" cookies=”false">
</Context
 
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics