关于cookie的问题

引入

会话跟踪是Web程序中常用的技术,会话跟踪技术依靠的是Cookie和session(暂时不考虑不支持cookie时采用的url重写技术),cookie是在客户端(浏览器)记录用户身份信息,session是再服务端记录用户使用的信息。

关于cookie的问题

什么是cookie

由于http协议是一种无状态的协议,所以服务器无法从http请求中获得用户之前的登陆信息,所以在登陆后发给用户一个标识token,用户下次请求带着这个标识token,服务器就方便区分了。

cookie使用中遇到的问题

  1. 根据上面的阐述可知,cookie是和网站对应的,也就是说,同一用户在A网站的cookie是不能带到B网站的,即便是同一主域名的二级域名之间也不行

    解决方法步骤如下:

    1. 在登陆后设置cookie时设置cookie域名以点开始,可以在不同二级域名之间传递
    2. 后端在B网站中配置跨域时加入:允许携带的请求头中加入cookie
  2. cookie的操作:

    cookie操作中没有删除,只能增改,如果要删除的话:

    1. 将对应cookie置空
    2. 设置过期时间为0【立刻过期】
  3. cookie的路径问题:

    会有问题,如果发现同一网站cookie不是所有的地址都能用的话,就设置路径为'/'【所有路径】

java中对cookie的操作

Cookie addCookie = new Cookie(,);
addCookie.setPath("/");
addCookie.setDomain(".lipengcheng.men");
addCookie.setMaxAge(-1);
HttpServletResponse.addCookie(addCookie);

关于session的问题

什么是session

session是服务器的解决方案,用于会话追踪。

Session在用户第一次访问服务器的时候自动创建。需要注意只有访问JSP、Servlet等程序时才会创建Session,只访问HTML、IMAGE等静态资源并不会创建Session。如果尚未生成Session,也可以使用request.getSession(true)强制生成Session。

Session生成后,只要用户继续访问,服务器就会更新Session的最后访问时间,并维护该Session。用户每访问服务器一次,无论是否读写Session,服务器都认为该用户的Session“活跃(active)”了一次。

java中对session的操作

void setAttribute(String attribute, Object value):设置Session属性。value参数可以为任何Java Object。通常为Java Bean。value信息不宜过大 String getAttribute(String attribute):返回Session属性 Enumeration getAttributeNames():返回Session中存在的属性名 void removeAttribute(String attribute):移除Session属性 String getId():返回Session的ID。该ID由服务器自动创建,不会重复 long getCreationTime():返回Session的创建日期。返回类型为long,常被转化为Date类型,例如:Date createTime = new Date(session.get CreationTime()) long getLastAccessedTime():返回Session的最后活跃时间。返回类型为long int getMaxInactiveInterval():返回Session的超时时间。单位为秒。超过该时间没有访问,服务器认为该Session失效 void setMaxInactiveInterval(int second):设置Session的超时时间。单位为秒 void putValue(String attribute, Object value):不推荐的方法。已经被setAttribute(String attribute, Object Value)替代 Object getValue(String attribute):不被推荐的方法。已经被getAttribute(String attr)替代 boolean isNew():返回该Session是否是新创建的 void invalidate():使该Session失效

cookie和session的联系

  1. cookie数据存放在客户的浏览器上,session数据放在服务器上;
  2. cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,考虑到安全应当使用session;
  3. session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能。考虑到减轻服务器性能方面,应当使用COOKIE;
  4. 单个cookie在客户端的限制是3K,就是说一个站点在客户端存放的COOKIE不能超过3K;

Cookie和Session的方案虽然分别属于客户端和服务端,但是服务端的session的实现对客户端的cookie有依赖关系的,上面我讲到服务端执行session机制时候会生成session的id值,这个id值会发送给客户端,客户端每次请求都会把这个id值放到http请求的头部发送给服务端,而这个id值在客户端会保存下来,保存的容器就是cookie,因此当我们完全禁掉浏览器的cookie的时候,服务端的session也会不能正常使用(注意:有些资料说ASP解决这个问题,当浏览器的cookie被禁掉,服务端的session任然可以正常使用,ASP我没试验过,但是对于网络上很多用php和jsp编写的网站,我发现禁掉cookie,网站的session都无法正常的访问)。

文献

http://www.cnblogs.com/wsnb/p/5151620.html

你可能感兴趣的:(关于cookie的问题)