`
com_xpp
  • 浏览: 354985 次
社区版块
存档分类
最新评论

Session那些事(二)

阅读更多

关于Session和Cookie的关系,这里详细分析一些

1.Cookie
Cookie是服务器在本地机器上存储的小段文本,它是一个简单的字符串形式的键值对。
网络服务器用HTTP头向客户端发送cookie,
(一般情况下Cookie是由服务端生成的,当然js也能操作cookie)
在客户端,浏览器解析这些cookies并将它们保存到本地,
而后当浏览器访问这个服务器时,它会在任何请求上加上这些cookie。
说白了就是每次你和服务器的交互都会带着这些cookie。

2.Cookie 与Session的关系
我们知道session是在服务端的,http又是无状态协议,而seesion又是靠session id来区分的,
因此为了传递session id让服务器识别,这个session id就存放在了cookie中。
(另一种方式是将session id放到url后面,后面我会提到)
因为每次向服务器发送请求时,http头都会带着cookie,
所以服务端就很方便地根据cookie读取出来的session id来区分各个请求的session。

比如我现在访问我测试用的servlet,在servlet代码中写上

HttpSession session = request.getSession();这样我就能建立一个session了。

用火狐访问,查看firebug的网络信息,我们可以发现他的响应信息中有
Set-Cookie JSESSIONID=5A810D07A1FB78122FFC2A74CA04F255; Path=/Test01/; HttpOnly
这些字样,这说明访问服务器的时候,服务端把seesion id写入到了cookie,
让客户端浏览器把cookie保存起来。

到这里我们似乎可以发现些什么,不知道你看到没有?
发送请求的时候带着cookie信息,
从响应信息里我们又看到了让浏览器设置cookie的信息,

发送请求 响应

从而我们可以得出,在servlet中,想获得cookie,我们需要从request中取,
下面这段代码就可以在控制台中把客户端过来的cookie信息都打印出来。

Cookie[] cs=request.getCookies();
for(int i=0;i<cs.length;i++){
  System.out.println(cs[i].getName());
  System.out.println(cs[i].getValue());
}而当你想添加cookie时就得往response里添加。

Cookie c = new Cookie("mycookie","cookie1234");
c.setMaxAge(3000);//设置cookie有效期, 单位为秒
response.addCookie(c);添加了这个cookie后,你会在刚才控制台的cookie打印中看到你这个mycookie信息。

3. 当客户端禁用了Cookie时,如何识别各个session
其实servlet中可以重写url,让他在url后面加上
;jsessionid=52156A910E95E259B6A2C13CC4DAA916
来识别。
我们可以在servlet中写上response.encodeURL(“test”),这样的话,
当session建立的时候,而客户端不支持cookie,则编码后的url为
test;jsessionid=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
若session没有建立,则编码后的url仍旧为test
当然如果session建立,客户端支持cookie的话,那么编码后的url也为test。

4.内存Cookie和普通Cookie的区别:
Session的是以cookie或URL重写实现的,默认是cookie来实现的。
系统会创造一个名为JSESSIONID的输出cookie,这种Cookie叫做session cookie,
这个session cookie有区别persistent cookies,也就是我们通常所说的普通的cookie。


特别值得注意的时:
session cookie是存储于浏览器内存中的,即所谓的内存cookie,并不是写到硬盘上的,
而普通的cookie则是存在硬盘上的。
我们刚才看到的JSESSIONID就是一个session cookie,我们通常情是看不到JSESSIONID的,
但是当我们把浏览器的cookie禁止后,web服务器会采用URL重写的方式传递session id,
我们就可以在地址栏看到JSESSIONID=XXXXXXXXXXXXXXXXXXXX之类的字符串了。

明白了这个,我们就可以很容易的分辨出persistent cookies和session cookie的区别了。
另外关于两者安全性也就很清楚了:
session cookie针对某一次会话而言,会话结束session cookie也就随着消失了;
而persistent cookie只是存在于客户端硬盘上的一段文本,
可以在服务端建立cookie时来设置任意有效期,
而且可能会遭到cookie欺骗以及针对cookie的跨站脚本攻击,
自然不如session cookie安全了。

12
0
分享到:
评论
2 楼 w156445045 2012-06-09  
不错不错,谢谢博主提供!
1 楼 liweiquan 2012-06-07  

相关推荐

    jboss session 复制二

    jboss session 复制二,网络资料,大家共同参考

    j2ee实验二:学习使用Session和Cookie

    j2ee实验二:学习使用Session和Cookie

    springboot +shiro+redis实现session共享(方案二)1

    springboot +shiro+redis实现session共享(方案二)1

    asp.net 二级域名间SessIon共享

    本程序实现如何在SiteA 实现共享 SiteB 中Session 的信息;本程序介绍了如何在使用IHttpModule 在Init 中进行Session共享处理。以及站点密钥的使用。(注意一点的就是)两个站点如果要实现Session共享 相同密钥是...

    Java Tomcat二级域名Session共享例子

    Tomcat二级域名Session共享例子,具体操作看博客:http://blog.csdn.net/luogqing/article/details/78595200

    在ASP.NET中,设置Session的过期时间的方法

    方法二:  在Web.config中设置:  在&lt;system&gt;&lt;/system&gt;中写入&lt;sessionState mode=”InProc” timeout=”1″&gt; 您可能感兴趣的文章:php 如何设置一个严格控制过期时间的sessionjava设置session过期时间的实现方法...

    Tomcat二级域名Session共享例子

    Tomcat二级域名Session共享例子,具体操作看博客:http://blog.csdn.net/luogqing/article/details/78595200

    php5的session详解

    php5的session详解.pdf php5 的session详解其一:什么是session?...php5 的session 详解之二:有两种方法传递 一个会话ID: php5 的session 详解之三:session安全 php5 的session 详解之四:……

    常用跨域共用session的是登录模块

    在一,二级域名下调用如下代码: include("DBsession.php"); $_SESSION['usssser_oke'] = 'xxssssss'; $_SESSION['user_oke'] = 'xxsss'; ?&gt; DBsession.php /** /** 直接引用api QQ登录的...

    tomcat cluster 集群 session复制

    一直以来,我误解认为启动了n个tomcat,则Session需要...第二组: http://localhost:17080/examples/servlets/servlet/SessionExample http://localhost:18080/examples/servlets/servlet/SessionExample 第三组: ...

    经典收藏Cookie和Session

    一、cookie机制和session机制的区别 ...... 二、会话cookie和持久cookie的区别 ......

    session机制详解

    目录: 一、术语session ...二、HTTP协议与状态保持 三、理解cookie机制 四、理解session机制 五、理解javax.servlet.http.HttpSession 六、HttpSession常见问题 七、跨应用程序的session共享 八、总结

    分布式session方案

    第一种:粘性session、第二种:服务器session复制、第三种:session共享机制、第四种......详细请参考文档

    2020 Mock Exam B - Afternoon Session (with Solutions).pdf

    2020 Mock Exam B - Afternoon Session (with Solutions).pdf

    thinkphp中session和cookie无效的解决方法

    主要介绍了thinkphp中session和cookie无效的解决方法,涉及针对BOM头的分析与删除方法,具有一定的参考借鉴价值,需要的朋友可以参考下

    tomcat实现session共享

    如何实现服务器集群session共享,redis用来tomcat共享。

    session的实例

    简单的网上购物,将购买者的姓名、商品名保存在session对象中,实现一个web目录下的页面对session对象中信息的共享。要求创建三个页面,第一个页面输入用户的姓名,第二个页面输入购买商品名的名称,第三个页面实现...

    asp.net下session的使用

    编写两个页面,在第一个页面中客户要输入姓名,然后保存到Session中。在第二个页面中读取该Session信息,并显示欢迎信息。如果客户没有在第一页登录就直接访问第二页,要将客户重定向到第一页。

    cookie.Session

    cookie和Session区别,网站中,http请求是无状态的。也就是说即使第一次和服务器连接后并且登录成功后,第二次请求服务器依然不能知道当前请求是哪个用户。cookie的出现就是为了解决这个问题,第一次登录后服务器...

    php使用session二维数组实例

    主要介绍了php使用session二维数组的用法,实例形式讲述了session中对于二维数组的运用技巧,非常具有实用价值,需要的朋友可以参考下

Global site tag (gtag.js) - Google Analytics