zoukankan      html  css  js  c++  java
  • 理解cookie和session

    前段时候和同事讨论了cookie,无结果,今天用实践来检验一下真理。

     

    我用的是(Win32) PHP/5.2.5语言和Apache/2.2.6服务器 (但本次讨论session和cookie跟服务器和语言无关,所以你如果你不懂PHP也没关系,你用别的服务器也是可以地。)

     

    第一步:

    所先来看一下,我做了两个页面A.php和B.php. A.php中有个链接到B.php中,B.php中也有个链接到A.php中。

    现在我们第一次请求页面A.php 发生了1动作。再点击A.php页面中的连接发生2动作请求到B.php,再点击B.php中的连接发生3动作返回到A.php页面中。如下图:

    现在我们来看一下这三次请求和返回的header信息,注意每一次请求和返回都有header,所以有分

    请求头信息 

    返回头信息

      

    我们看到,没有发生sessioncookie的发送和返回,因为我们没有在代码中写关于sessioncookie的设置。

     

    第二步:

     

    现在我们对页面A.php中加入代码。如图:

    先看一下添加的代码:

     

    $_SESSION['name']='zsk'     服务器添加一个名为name值为zsksession

    setcookie('name','zsk02')   服务器添加一个名为name值为zsk02cookie

     

    如上图,再进行上面的步骤,发生三次请求,并多加一步从A.php再链接到B.php发生第四次动作。

     

    现在我们来看一下这四次请求和返回的header信息,如下图:

    第一次动作:

     

    l  请求头信息中没有cookiesession.因为是第一次请求嘛。

     

    l  返回头信息

    a)  返回了session:PHPSESSID=5732c32c044a4ab6fb1c184c807b4781

    b)  返回了cookie:name=zsk02

     


    第二次请求:

     

    l  请求头信息中有,就是上一步返回的session和cookie,把这两个发送给服务器

     

    l  返回头信息中,没有cookiesession

     


     

    第三次请求:

     

    l  请求头信息中有,跟第二次请求一样,有session和cookie

     

    l  返回头信息

    a)  返回了cookie:name=zsk02

     


    第四次请求:和第二次一样的请求头信息和一样的返回头信息

    l 请求头信息中有,session和cookie,把这两个发送给服务器


    l  返回头信息中,没有cookiesession


     

    如果我在这里禁用了浏览器的所有cookie。会发生什么呢? 答案是  服务器返回的时候会有session和cookie。 但是请求的时候都不会有session和cookie.


     


     

    提醒大家:

    1.当第一次请求一个网站,网站返回有session时只返回sessionID。当再请求这个网站的任何页面,都会把sessionID发送到服务器,页面返回不再有session ID 

    2.当一个网站的请求页面有cookie时,再请求这个页面还会返回cookie,请求这个网站的任何页面,都会把所有cookie的名和值都发送到服务器。

    3.当我们把浏览器上的cookie禁掉。页面会每次返回一个不同的session ID.

     

    关于session,必要条件是我们请求的网站需要识别同一个用户的请求,如用户登入。这样在用户第一次请求时因为没的sessionID,服务器给用户建立一个随机的sessionID(这个sessionID是唯一的,用于识别不同的用户),并返回给用户,当用户再请求时会把sessionID返回给服务器,服务器收到sessionID就知道这个用户是哪一个用户了。如果用户关闭了浏览器,则浏览器保存sessionID就会消失,但用服务器内的sessionID还在,如果过了一段时间(一般为20分钟,由服务器配置决定),服务器没有收到已保存的sessionID,服务器就抛弃了这个sessionId如果用户禁用cookie, 用户请求时,服务器也是会为用户建立一个sessionID并返回给浏览器,但是此时浏览器不保存起来,当用户再次请求时没有sessionID发送到服务器,服务器认为这个用户是第一次请求,给用户建立一个随机的sessionID,这样每次用户请求时都当做第一次请求,都会建立一个新的sessionID并返回给浏览器,可浏览器就是不接收。

     

     

    关于cookie,如果服务器发送一个cookie到浏览器,浏览器就保存了这个cookie,一个cookie包括cookie名和cookie值。浏览器每次再请求这个网站的时候都会把这个cookie名值发送给服务器。 如果用户禁用cookie, 用户请求时,服务器也是会发送cookie给浏览器,但是此时浏览器不保存起来(跟session一样)。

     

     

    Sessioncookie的区别:

    服务器只把sessionID发送给浏览器,session的值保存在服务器中,每次浏览器请求都会把sessionID发送给服务器。 服务器通过sessionID识别同一个浏览器的请求。

    Cookie则是把cookie的名和值保存在用户的电脑里,浏览器每次请求都会把cookie名和值发送给服务器。

     

    因为cookie在用户的电脑里,所以看以被查看到,也可以被修改。也可以在本地被建立,javascrip脚本也可以写cookie,javascript建立的cookie和服务器建的cookie是一样的,没有本质的差别,可以相互识别和修改。


     

     

     

    现在我们第一次请求页面A.php,如下图,


    发生了1动作。再点击A.php页面中的连接发生2动作请求到B.php,再点击B.php中的连接发生3动作返回到A.php页面中。

  • 相关阅读:
    route命令
    linux下限制ip访问
    linux安装oracle客户端
    Upgrading to Kentico 12
    online youtube subtitle downloader
    Driving continuous quality of your code with SonarCloud
    炉石传说 乱斗模式 三足鼎立
    Behavior-driven development
    TestNG like unit testing framework in C# (C sharp)
    Windows 10 & 8: Install Active Directory Users and Computers
  • 原文地址:https://www.cnblogs.com/zsk526/p/1778318.html
Copyright © 2011-2022 走看看