`
javajeye
  • 浏览: 62476 次
  • 性别: Icon_minigender_2
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论
  • docong: 这根本不是lazy initial 的问题,而是你没有覆盖Th ...
    ThreadLocal
阅读更多
                                       Session与Cookie的区别

   为什么会有cookie呢,大家都知道,http是无状态的协议,客户每次读取web页面时,服务器都打开新的会话,而且服务器也不会自动维护客户的上下文信息,那么要怎么才能实现网上商店中的购物车呢,session就是一种保存上下文信息的机制,它是针对每一个用户的,变量的值保存在服务器端,通过   SessionID来区分不同的客户,session是以cookie或URL重写为基础的,默认使用cookie来实现,系统会创造一个名为   JSESSIONID的输出cookie,我们叫做session   cookie,以区别persistent   cookies,也就是我们通常所说的cookie,注意session   cookie是存储于浏览器内存中的,并不是写到硬盘上的,这也就是我们刚才看到的JSESSIONID,我们通常情是看不到JSESSIONID的,但是当我们把浏览器的cookie禁止后,WEB服务器会采用URL重写的方式传递Sessionid,我们就可以在地址栏看到sessionid=   KWJHUG6JJM65HS2K6之类的字符串。 
                            明白了原理,我们就可以很容易的分辨出persistent   cookies和session   cookie的区别了,网上那些关于两者安全性的讨论也就一目了然了,session   cookie针对某一次会话而言,会话结束session   cookie也就随着消失了,而persistent   cookie只是存在于客户端硬盘上的一段文本(通常是加密的),而且可能会遭到cookie欺骗以及针对cookie的跨站脚本攻击,自然不如   session   cookie安全了。 
                            通常session   cookie是不能跨窗口使用的,当你新开了一个浏览器窗口进入相同页面时,系统会赋予你一个新的sessionid,这样我们信息共享的目的就达不到了,此时我们可以先把sessionid保存在persistent   cookie中,然后在新窗口中读出来,就可以得到上一个窗口SessionID了,这样通过session   cookie和persistent   cookie的结合我们就实现了跨窗口的session   tracking(会话跟踪)。 
                          在一些WEB开发的书中,往往只是简单的把Session和cookie作为两种并列的http传送信息的方式,session   cookies位于服务器端,persistent   cookie位于客户端,可是session又是以cookie为基础的,明白的两者之间的联系和区别,我们就不难选择合适的技术来开发WEB   service了。

(1)

session总是放在服务器上的,每个客户会跟一个sessionID对应。因为HTTP是无连接的,如何区分同一个客户的多次请求呢,就需要客户端每次发请求的时候,发送相应的sessionID。
通常情况下,sessionID在客户端以cookie的形式保存。如果浏览器静止了cookie,客户端再向服务器发请求的时候,就不会发送sessionID,因此服务器就会将这个请求作为一个新客户,所以就会出现session值丢失的假象。
这时候出现一个问题,如果客户浏览器不支持cookie,怎么办?J2EE提供的另一个办法就是URL重写,写超链接的时侯,总是用 response.encodeURL(url),连接就会变成*.jsp?sessionID=......,完成了原来用cookie完成的功能。
J2EE建议,不论客户浏览器是否支持cookie,服务器端编程都建议使用URL重写。

(2)

web上用的都是非连接的网络协议
session 是存在服务器上的
每个session有一个唯一的session ID(为了标识他是那个客户端的)

在启动session的同时,会在客户端生成cookie,服务器把session ID加到cookie中
每次服务器和客户端交互的时候,就是从cookie中取得session ID 来定位服务器上的session

这样只要你的cookie不过期,服务器上有你的session,就不会出问题

(3)

JSP实现在浏览器关闭cookies情况下的会话管理

通常,会话管理是通过服务器将 Session ID 作为一个 cookie 存储在用户的 Web 浏览器中来唯一标识每个用户会话。如果浏览器不支持 cookies,或者将浏览器设置为不接受 cookies,我们可以通过 URL 重写来实现会话管理。

  实质上 URL 重写是通过向 URL 连接添加参数,并把 session ID 作为值包含在连接中。然而,为使这生效,你需要为你的 servlet 响应部分的每个连接添加 session ID 。

   把 session ID 加到一个连接可以使用一对方法来简化:response.encodeURL() 使 URL 包含 session ID,如果你需要使用重定向,可以使用 response.encodeRedirectURL () 来对 URL 进行编码。

  encodeURL () 及 encodeRedirectedURL () 方法首先判断 cookies 是否被浏览器支持;如果支持,则参数 URL 被原样返回,session ID 将通过 cookies 来维持。

  来看下面的例子,两个 JSP 文件:hello1.jsp 和 hello2.jsp,及它们之间的影响。我们在 hello1.jsp 中简单的创建一个会话,并在 session 中存储一个对象实例。接着用户可以点击页面的连接到达 hello2.jsp。在 hello2.jsp 中,我们从 session 中获取原先放置的对象并显示它的内容。注意,我们在 hello1.jsp 中调用了 encodeURL() 方法来获得 hello2.jsp 的链接,使得在浏览器停用 cookies 的情况下,session ID 自动添加到 URL,hello2.jsp 仍能得到 session 对象。

  首先在启用 cookies 的情况下运行。然后关闭对 cookie 的支持,重启浏览器,再运行一次。每次你都可以看到会话管理在起作用,并能在页之间传递信息。

注意,如果你想让这个例子能在关闭了 cookies 的浏览器中工作,你的 JSP 引擎必须支持 URL 重写。

http://hi.baidu.com/victoryz/blog/item/fc0b434f2580fb31afc3ab83.html
分享到:
评论

相关推荐

    Session Cookie的HttpOnly和secure属性

    其次,GlassFish2.x支持的是servlet2.5,而servlet2.5不支持Session Cookie的"HttpOnly"属性。不过使用Filter做一定的处理可以简单的实现HttpOnly属性。GlashFish3.0(支持servlet3.0)默认开启Session Cookie的...

    Retrieve HttpOnly Session Cookie in WebBrowser

    In order to help mitigate the risk of cross-site scripting, a new feature has been introduced in Microsoft Internet Explorer 6 SP1.... A cookie with this attribute is called an HTTP-only cookie.

    session cookie asp.net

    session cookie asp.net 的教学ppt

    PHP创建和使用session cookie变量

    // session start session_start(); // 开始一个会话,如果要使用session程序最前面一定要加上这句 $_SESSION['user_id'] = ‘123′;//给一个session 变量赋值,如果该变量不存在即创建 echo $_SESSION['user_id'];...

    flask、session、cookie解加密脚本

    flask、session、cookie解加密脚本

    flask-session-cookie-manager

    使用python脚本更改或生成cookie

    session 和cookie 区别

    session 和cookie 区别!!

    jsp cookie+session实现简易自动登录

    本文实例为大家分享了jsp cookie+session实现简易自动登录的具体代码,供大家参考,具体内容如下 关闭浏览器只会使存储在客户端浏览器内存中的session cookie失效,不会使服务器端的session对象失效。 如果设置了...

    Cookie,Session,Application的区别与应用

    在ASP.NET中,有很多种保存信息的内置对象,如:Application,Session,Cookie,ViewState和Cache等。下面分别介绍它们的用法和区别。 方法 信息量大小 作用域和保存时间 应用范围 保存位置

    经典收藏Cookie和Session

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

    Session Cookie

    简单的描述的Session与Cookie的区分,以及他们的用法

    一次搞明白 Session、Cookie、Token,面试问题全搞定.pdf

    一次搞明白 Session、Cookie、Token,面试问题全搞定.pdf 面试中的问题一站式全搞定 在也不用头疼面试官的问题了。

    破解Session cookie的方法

    破解Session cookie的方法所謂的 session cookie, 就是站台在你登錄成功後,送上一個 cookie,表示你已經通過驗證,但與一般cookie不同的是,他並不會存在你的硬碟上,也就是說:在你離開瀏覽器之後,就會消失,也...

    Servlet对Cookie和Session的管理源码实例

    Servlet对Cookie和Session的管理:会话跟踪、会话浏览、过滤器、事件监听、以及不依赖浏览器的后台跟踪和浏览源码。

    flask-session-cookie-manager:Flask会话Cookie解码器

    Flask Session Cookie解码器/编码器 原作者: 修复和改进作者: 从导入 依赖 Python 2或Python 3 安装 包 BlackArch Linux # pacman -S flask-session-cookie-manager{3,2} 吉特 ArchLinux 两者python3 etn ...

    servlet+cookie和Session

    非常好的课件,供大家学习与交流,讲解了servlet和Cookis,session的基本知识。

    session和cookie详解

    session cookie 区别 让你轻松知道他们的用法,作用。

    彻底杜绝PHP的session cookie错误

    今天我们就来搞定它…………… 看了PHP手册,回答如下: 消息“Warning: Cannot send session cookie – headers already sent。。。”或者“Cannot add header information – headers already sent。。。”。 ...

    解决springboot实现跨域session共享问题

    解决springboot实现跨域session共享问题,防止sql注入。可以更有效的解决token问题,欢迎下载,有问题可以再评论下方留言,及时解答!!加群:687942640

    cookie后台操作

    cookie的后台操作,这里是cookies的一个工具类 // 用户登录跳转 public String login() { if (cookieUtils.getCookie(request, userDao)) { return SUCCESS; } else return "login"; } @Override // ...

Global site tag (gtag.js) - Google Analytics