我有几个问题想请教,
1.session 的机制是什么?
2.如果我把cookie删除了 能得到当前用户的session吗?
3.session 是整个回话级别,当我关闭当前访问的网页签,开启新的网页时,之前的session还有效吗?

解决方案 »

  1.   

    1、Session是一种保持浏览器和服务器之间连接状态的机制。实际上是靠cookie机制产生的一种方式。
    2、cookie分为内存cookie和普通cookie,浏览器和服务端保持session就是靠内存cookie,内存cookie不往硬盘里写,普通cookie会落盘。如果你完全禁止了cookie就不能用session了,你删除了还能用的(楼主可以自己做实验)。
    3、你关闭页签这要看不同浏览器的机制了。要看这个浏览器的该也签关闭后,是否内存cookie跟着一起清掉,这个你可以再上网查详细的资料。
       网上关于session的资料不少,建议楼主用“session详解”去搜索资料,百度文库里也会有很多文档,可以下下来研究下。希望说的能帮上楼主。
      

  2.   

    session的实现还牵涉到不同的应用服务器
    比如tomcat可以通过url非标准的附带信息来实现无cookie的session
      

  3.   

      
     你说的没错,服务端判断当前用户session 是通过sessionid来识别的,而cookie中存储了sessionId.如果禁止了cookie,显然sessionId也没法取. 那session是什么时候创建的啊,是登录网站就创建了?还是调用request.getSession() 才创建呢??
      

  4.   

    一般在服务端的Filter中使用该语句:HttpSession session=req.getSession(true);//如果没有该session,则自动创建一个新的session。拿到session去判断是不是有用户名和密码,如果有就表明登陆成功了,如果没有就表明没有登陆,则跳转到登陆页面,如果使用了用户名和密码,则再用这个语句拿到session,重复之前的工作就行了。楼主可以查"servlet session"关键字,很多资料和实例,你看了就明白了。
      

  5.   

    嗯,刚转了一篇session 详解,http://blog.csdn.net/lin_464025910/article/details/7372280 写的很详细. 学习了.哈哈
      

  6.   

    session 只存在于服务器中,每次交互是以sessionid同客户端交互的。一次会话,sessionid是固定的;服务器根据这个sessionid确认是哪个客户端。如果允许cookie,sessionid从服务器上下载下来后,存在于cookie中。下次请求,cookie主动把sessionid带上,告诉服务器,我就是上次那个。如果禁止cookie,sessionid会在服务器每次请求响应中都被带上,会保存在http头文件中。如果你关标签页,sessionid是不会变的,如果你关掉整个浏览器,再重新打开浏览器,服务器会为客户端重新生成一个sessionid。以前的sessionid服务器会自动维护,直到失效。
      

  7.   


    你的意思cookie禁了,也能知道JsessionId对应的session 吗?因为sessionid会在服务器每次请求响应中都被带上,会保存在http头文件中.那sessionid存在客户端哪呢.文本隐藏域?  
      

  8.   

    这叫做:java url重写,你根据这个关键字去搜索,很多资料的。楼主可以研究下。
      

  9.   


    sessionid这里没有以文本方式存储了,而是在当前浏览器对应的当前页面的头文件信息中,也就是存在浏览器的内存中的。你再请求时,浏览器会自动带上sessionid请求。
    这个你可以用了抓包工具查看就明白了。
      

  10.   

    自己整理的:【1、session的实现即机制是什么?】
    称为“会话”。它具体是指一个终端用户与交互系统进行通信的时间间隔,通常指从注册进入系统到注销退出系统之间所经过的时间。Session实际上是一个特定的时间概念。session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息。   当程序需要为某个客户端的请求创建一个session的时候,服务器首先检查这个客户端的请求里是否已包含了一个session标识 - 称为session id,如果已包含一个session id则说明以前已经为此客户端创建过session,服务器就按照session id把这个 session检索   出来使用(如果检索不到,可能会新建一个),如果客户端请求不包含session id,则为此客户端创建一个session并且生成一个与   此session相关联的session id,session id的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个session id将被在本次响应中返回给客户端保存。 【2、session和cookie的区别。】
    session保存在服务器,客户端不知道其中的信息;cookie保存在客户端,服务器能够知道其中的信息。  
    session中保存的是对象,cookie中保存的是字符串。
    客户端完全禁止cookie,session将失效。通常解决办法:重写URL来实现sessionId的保存,session跟踪
      

  11.   

    禁用 Cookie 通过 URL 来携带 session id 是很不安全的一般来说禁用了 Cookie,那也没必要让他登录成功了!
      

  12.   

    可以去试试淘宝网,把 Cookie 禁用后,看看淘宝会不会让你登录成功,呵呵。
      

  13.   

    楼上有位兄弟说,如果禁止cookie,sessionId还能传到服务器.因为它保存在浏览器内存里.再次请求时会自动带上JsessionId在请求里. 这个机制浏览器会自动转换吗? 如果cookie存在则用cookie中保存的sessionId 与服务器端判断,如果cookie禁止 则JsessionId以参数形式加到请求头部?
      

  14.   

    刚我验证了下,登录sina微博后,我禁用了cookie.结果是登录不了的.说明session对用户的识别是通过cookie的.
      

  15.   


    这并不能表明禁用了cookie就禁用了sessionid的传输啊。因为如果禁用了cookie,sessionid就会以URL重写方式传输,但这是不安全的,因为这sessionid容易被盗用。所以如果服务器检查到你是以URL重写方式登陆,它是不会让你登陆的,因为不安全。这跟传不传sessionid没关系。12楼也并没说,禁用了cookie,sessionId就不能传输了。还有楼主你了解一下persistent cookies和session cookie。
      

  16.   

    session存在于服务器,cookie存在于客户端,浏览器访问服务器的时候,服务器会将信息以set-cookie消息头的的格式发送到浏览器上,下次你在访问服务器的时候就可以直接看到上次你访问的东西,比如说商城的购物车。
    当然如果cookie禁止了,可以使用URL重写来实现功能,cookie是客户端自己禁止的,服务器不让你通过URL重写登录你也没话说,也不太安全!
      

  17.   

    session放在服务器上, cookie是在客服机上面。
      

  18.   

    session肯定是需要客户端提供给服务端一个标示,服务端才能知道谁是谁。。至于这个标示怎么传送放在那里,方法就多种多样了。cookie是一种,直接把标示放在url上也可以,作为一个参数提交。