session 与cookie 的人生故事

什么是cookie:

答:在程序中,会话跟踪是很重要的事情。理论上,一个用户的所有请求操作都应该属于同一个会话。 Web 应用程序是使用 HTTP 协议传输数据的。HTTP 协议是无状态的协议。一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接。这就意味着服务器无法从连接上跟踪会话。。要跟踪该会话,必须引入一种机制。 Cookie 就是这样的一种机制。它可以弥补 HTTP 协议无状态的不足。在 Session 出现之前,基本上所有的网站都采用 Cookie 来跟踪会话。

什么是session

session 是另一种记录客户状态的机制,不同的是cookie保存在客户端浏览器中,而session保存在服务器上。客户端浏览器访问服务器时,服务器把客户端信息以某种形式记录在服务器上。这就是session。客户端再访问时只需要从session中查找该客户的状态就可以了。相比cookie,相应的也增加了服务器的存储压力。

session何时销毁:

超时[30min]
服务器非正常关闭[stop server]
主动调用httpsession.invalidate()销毁方法

如何利用 cookie 实现自动登录?

当用户在某个网站注册后,就会收到一个惟一用户 ID 的 cookie。客户后来重新连接时,这个用户 ID 会自动返回,服务器对它进行检查,确定它是否为注册用户且选择了自动登录,从而使用户无需给出明确的用户名和密码,就可以访问服务器上的资源.

保存session id 有几种方法?

A 保存 session id 的方式可以采用cookie,这样在交互过程中浏览器可以自动的按照规则把这个标识发送给服务器。  

B.由于 cookie 可以被人为的禁止,必须有其它的机制以便在 cookie 被禁止时仍然能够把 session id 传递回服务器,经常采用的一种技术叫做 URL 重写,就是把 session id 附加在 URL 路径的后面,附加的方式也有两种,一种是作为 URL 路径的附加信息,另一种是作为查询字符串附加在 URL 后面。网络在整个交互过程中始终保持状态,就必须在每个客户端可能请求的路径后面都包含这个 session id。    

C.另一种技术叫做表单隐藏字段。就是服务器会自动修改表单,添加一个隐藏字段,以便在表单提交时能够把 session id 传递回服务

session什么时候被创建?

session 在有客户访问直到某 server 端程( Servlet)调用HttpServletRequest.getSession(true)这样的语句时才会被创建。

cookie机制和 session 机制的区别?

cookie 机制采用的是在客户端保持状态的方案,而 session 机制采用的是在服务器端保持状态的方案。

Session工作原理  Session用于保存每个用户的专用信息. 每个客户端用户访问时,服务器都为每个用户分配一个唯一的会话ID(Session ID) . 它的生存期是用户持续请求时间再加上一段时间(一般是20分钟左右).Session中的信息保存在Web服务器内容中,保存的数据量可大可小.当 Session超时或被关闭时将自动释放保存的数据信息.由于用户停止使用应用程序后它仍然在内存中保持一段时间,因此使用Session对象使保存用户数据的方法效率很低.对于小量的数据,使用Session对象保存还是一个不错的选择。

    Cookie 用于保存客户浏览器请求服务器页面的请求信息,程序员也可以用它存放非敏感性的用户信息,信息保存的时间可以根据需要设置.如果没有设置Cookie失效日期,它们仅保存到关闭浏览器程序为止.如果将Cookie对象的Expires属性设置为Minvalue,则表示Cookie永远不会过期.Cookie存储的数据量很受限制,大多数浏览器支持最大容量为4K,因此不要用来保存数据集及其他大量数据.由于并非所有的浏览器都支持Cookie,并且数据信息是以明文文本的形式保存在客户端的计算机中,因此最好不要保存敏感的,未加密的数据,否则会影响网站的安全性

session的机制

  session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构来保存信息。

程序需要为某个客户端的请求创建一个session的时候,服务器首先检查这个客户端的请求里是否包含了一个session标识-称为sessionid,如果已经包含一个session id则说明以前已经为此客户创建过session,服务器就按照session id把这个session检索出来使用。

如果客户请求不包含session id,则为此客户创建一个session并且生成一个与此session相关联的session id,这个session id将在本次响应中返回给客户端保存。

1.获取cookie数组中专门用于统计用户访问次数的cookie的值

2.将值转换成int

3.将值加1并用原来的名称重新创建一个Cookie对象

4.重新设置最大时效

5.将新的cookie输出

使用cookie检测初访者的常见错误

不能仅仅因为cookie数组中不存在在特定的数据项就认为用户是个初访者。如果cookie数组为null,客户可能是一个初访者,也可能是由于用户将cookie删除或禁用造成的结果。

 但是,如果数组非null,也不过是显示客户曾经到过你的网站或域,并不能说明他们曾经访问过你的servlet。其它servletJSP页面以及

Java Web应用都可以设置cookie,依据路径的设置,其中的任何cookie都有可能返回给用户的浏览器。

  正确的做法是判断cookie数组是否为空且是否存在指定的Cookie对象且值正确。

如何使用cookie检测初访者

A.调用HttpServletRequest.getCookies()获取Cookie数组

B.在循环中检索指定名字的cookie是否存在以及对应的值是否正确

C.如果是则退出循环并设置区别标识

D.根据区别标识判断用户是否为初访者从而进行不同的操作

如何根据用户的爱好定制站点:

网站可以使用cookie记录用户的意愿。对于简单的设置,网站可以直接将页面的设置存储在cookie中完成定制。然而对于更复杂的定制,网站只需仅将一个惟一的标识符发送给用户,由服务器端的数据库存储每个标识符对应的页面设置。

如果不设置过期时间,则表示这个cookie生命周期为浏览器会话期间,只要关闭浏览器窗口,cookie就消失了。这种生命期为浏览会话期的cookie被称为会话cookie。会话cookie一般不保存在硬盘上而是保存在内存里。

如果设置了过期时间,浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些cookie依然有效直到超过设定的过期时间。如果你希望浏览器将该cookie存储在磁盘上,则需要使用maxAge,并给出一个以秒为单位的时间。将最大时效设为0则是命令浏览器删除该

 cookie

Cookie& session :

答:会话(session)跟踪是web程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是cookie sessioncookie通过客户端记录信息确定用户身份,session 通过在服务器端记录信息确定用户身份。

2session中保存的是对象,cookie中保存的是字符串。

3session不能区分路径,同一个用户在访问一个网站期间,所有的session在任何一个地方都可以访问到。而cookie中如果设置了路径参数,那么同一个网站中不同路径下的cookie互相是访问不到的。  

4session需要借助cookie才能正常工作<nobr οncοntextmenu="returnfalse;" οnmοusemοve="kwM(3);" id="key3"οnmοuseοver="kwE(event,3, this);" style="COLOR: #6600ff;BORDER-BOTTOM: 0px dotted; BACKGROUND-COLOR: transparent; TEXT-DECORATION:underline" οnclick="return kwC();" οnmοuseοut="kwL(event,this);" target="_blank"> </nobr>

如果客户端完全禁止cookiesession将失效。

 

http是无状态的协议,客户每次读取web页面时,服务器都打开新的会话,而且服务器也不会自动维护客户的上下文信息,那么要怎么才能实现网上商店中的

购物车呢,session就是一种保存上下文信息的机制,它是针对每一个用户的,变量的值保存在服务器端,通过SessionID来区分不同的客户。

 

session是以cookieURL重写为基础的,默认使用cookie来实现,系统会创造一个名为JSESSIONID的输出cookie,我们叫做session cookie,以区别persistent

cookies,也就是我们通常所说的cookie,注意sessioncookie是存储于浏览器内存中的,并不是写到硬盘上的,这也就是我们刚才看到的JSESSIONID,我们通常情是看不到JSESSIONID的,但是当我们把浏览器的cookie禁止后,web服务器会采用URL重写的方式传递Sessionid,我们就可以在地址栏看到

sessionid=KWJHUG6JJM65HS2K6之类的字符串。

 

session cookie针对某一次会话而言,会话结束session cookie也就随着消失了,而persistent

cookie只是存在于客户端硬盘上的一段文本(通常是加密的),而且可能会遭到cookie欺骗以及针对cookie的跨站脚本攻击,自然不如

session cookie安全了。通常session cookie是不能跨窗口使用的,当你新开了一个浏览器窗口进入相同页面时,系统会赋予你一个新的sessionid,这样我们信息共享的目的就达不到了,此时我们可以先把sessionid保存在persistent cookie中,然后在新窗口中读出来,就可以得到上一个窗口SessionID了,这样通过session cookiepersistent

cookie的结合我们就实现了跨窗口的session tracking(会话跟踪)。

在一些web开发的书中,往往只是简单的把Sessioncookie作为两种并列的http传送信息的方式,session

 cookies位于服务器端,persistent cookie位于客户端,可是session又是以cookie为基础的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值