面试的一个问题:session和cookie有什么区别?session运行在服务器端还是客户端?谢谢

解决方案 »

  1.   

    session 服务器端
    cookie 客户端
      

  2.   

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

  3.   

    为什么会有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了。
      

  4.   

    SESSION是可以存储针对与某一个用户的IE以及通过其当 前窗口打开的任何窗口具有针对性的用户信息存储机制。为什么要这样说。看下边 先研究SESSION是如何启动的,当打开IE以后浏览网站后会发出一个指令请求SESSIONID以 及对各个类型数据的下载许可,如图片,声音以及FLASH。 
    数据实际传输内容:IE到服务器 
    GET / HTTP/1.1 
    Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, */* 
    Accept-Language0: zh-cn 
    Accept-Encoding: gzip, deflate 
    User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0) 
    Host: www.jh521.com 
    Connection: Keep-Alive 
    服务器会返回一个没有被使用的SESSIONID让IE使用,当时IE就对返回SESSIONID做存储 并同时返回相关页面的下载数据,如下:服务器到IE 
    HTTP/1.1 200 OK 
    Server: Microsoft-IIS/5.0 
    Date: Sun, 30 Nov 2003 16:41:51 GMT 
    Content-Length: 21174..Content-Type: text/html 
    Set-Cookie: ASPSESSIONIDCACBBBRT=IBOMFONAOJFEEBHBPIENJFFC; path=/ 
    Cache-control: private 
    然后就是页面HTML代码 此时这个IE程序(不是客户机)的SESSIONID就为IBOMFONAOJFEEBHBPIENJFFC 而当IE在访问任何这个站点的ASP程序的时候,就会把IBOMFONAOJFEEBHBPIENJFFC发送 给服务器,服务器就会知道IBOMFONAOJFEEBHBPIENJFFC是表示你 
    而在服务器上设置SESSION("name")="name" 
    完全可以看成是 
    SESSION("IBOMFONAOJFEEBHBPIENJFFC")("name")="name" 
    或者 
    SESSION(SESSIONID)("name")="name" 
    这样,SESSION就区分开用户了。 
    而当服务器反馈这个ID的时候会看这个ID有没有被使用。如果有在换一个 
    反正不会让你重复,如果想模拟某人的SESSION的ID来进行欺骗是可以的。不过要获取到 对方IE传输信号,并且在保证当时这个SESSIONID没有被取消的情况下才可能实施。 不过要是我有那时间直接通过POST信号找他NAME和PASS了。我可不费这个劲 想必一些人明白了了SESSIONID到底是如何工作的 那么就在看看COOKIE,有人说SESSIONID就是COOKIE,按照技术上来讲他们不属于同类 但是属于一种工作模式,用户和服务器传输私有数据 当我设置COOKIE的时候,服务器会反馈给IE一个指令。IE通过这个网络指令生成COOKIE并 存放,在特定的时候会取得这个这个信息如在访问这个站点并且COOKID有效的时候。 那么为什么要用COOKIE而不用SESSION呢 
    看下区别 有效时间以及存储方式 传输内容 
    COOKIE 可设置并在本地保留 明码信息 SESSION 在IE不关闭并服务器不超时 只有SESSIONID 当如果想让用户下次登入网站不需要输入用户名或者密码的时候就只能用COOKIE, 因为他可以保留相当长的时间(在COOKIE记录被删除或者失效日期之前) 而SESSION就不可以,他不会保留太长时间,而且IE在关闭后就自动清除了SESSIONID记录 在下次登入的时候会请求新的SESSIONID 而服务器想通过用户个人变量校验用户的状态的时候,就不能用COOKIE 如果用设置用户权限是USER。而IE访问的时候就把USER的明码传输到服务器。 那么如果我通过一定手段,比如直接修改COOKIE记录,把USER修改成ADMIN呢~~ 就麻烦了。 但存储用户名和密码或者网站的配色方案这样的信息,用COOKIE是最好的 
    Request.ServerVariables("HTTP_REFERER") 我想有一些人通过这个Request.ServerVariables("HTTP_REFERER") 
    来进行一些关键性限制,特别是对付远程提交以及非法侵入。 
    那么我就要提醒下服务器取得的HTTP_REFERER信息完全是IE传输给服务器的,可以模拟 
    而且难度不大,用不到半个小时就可以用VB做出一个针对HTTP_REFERER入侵程序。 
    (可惜我原先那他没干正经事情,做WEB游戏挂机程序来的) 两者均用于保存用户私有信息
    session
    存储于服务器端,可被服务器端脚本修改。数据不在网络上传递。
    cookie
    存储于客户端,可被客户端脚本修改。数据将在网络上传递。--------------------------------------------------------------------------------session会给服务器带来开销。
    cookie不会给服务器增加过多的开销。
    对两者进行加密传输,所以在网络上传递将会比现在安全多了。--------------------------------------------------------------------------------二者都是保存数据的机制,其他的变量都会因页面的更换而丢失,所以更换页面时保持上页的一些数据成为了一种需要.
    既然HTTP协议中没有考虑保存数据,那就只好另想方案了,经过思考,保存数据出现两种方案,一种是把数据保存在客户端,那就是Cookie,一种是把数据保存在服务器端,那就是Session.目的都是保持数据,
      

  5.   

    csdn为什么能够选择“两周内不用再登录”?因为它把cookie写到了你的计算机里。
    你把cookie清空试试。
      

  6.   

    Cookie也是在服务器端生成并返回给browser保存在客户端的,下次请求的时候连同cookie一起发送给服务器端。