zoukankan      html  css  js  c++  java
  • cookie & session

    cookie与session类似,掌握其中一个的用法,那么另外一个掌握起来也就不难。

    首先说cookie吧

    cookie由服务器创建,以文件形式保存在客户端的硬盘上。服务器与客户端交互的时候,就是依靠读取硬盘上的cookie,然后匹配后,判断是否为同一用户。

    一、创建cookie

    用setcookie(name,value,time,...),创建的cookie会保存在一个超全局数组($_COOKIE)当中.

    <?php   
    header("Content-type:text/html;charset=utf-8");
    setcookie('name','beyond',time()+3600);
    setcookie('email','1355036599@qq.com',time()+3600); 
    echo '<a href="test_2.php">点击查看cookie</a>';
    var_dump($_COOKIE);
    ?>
    

     输出:

    array
      'name' => string 'beyond' (length=6)
      'email' => string '1355036599@qq.com' (length=17)
    

     注意:cookie时间的单位是秒(s),time()+60,表示的是该cookie的有效时间时从创建到失效的时间是60秒。在创建cookie时千万不要忘记时间,不然设置的cookie会立即失效。 

    二、查看cookie

    在其他页面或者本页面查看cookie时。查看cookie的整体属性的时,可如上例直接输出$_COOKIE;若要查看cookie的单个属性值时,比如name属性,则可用$_COOKIE['name'];输出的便是beyond,而不会输出email及其值。

    三、删除cookie

    常用的方法是:重新创建一个cookie或者说是重新赋值,但是新创建的cookie当中的属性名(name)都相同,只不过属性值(value)为空,时间time()为过去。

    比如setcookie(‘name’,‘’,time()-3600);这就相当于删除cookie。

    还有一种方法是用php的unset()函数,想要删除cookie的什么属性,就unset($_COOKIE['属性名'])。

    再说session

    和cookie正好相反,session由服务器创建,以文件形式保存在服务器端的硬盘上。服务器与客户端交互的时候,就是依靠读取硬盘上的session,然后匹配后,判断是否为同一用户。

    一、创建session

    在创建session之前,要先启动会话,用sesstion_start()函数。注意session_start()函数之前不要包含是任何文本输出。

    然后家可以创建session了。session的创建与cookie有点不同,不像cookie用setcookie来创建,session直接用$_SESSION['name']=value来实现创建。创建session同样都保存在$_SESSION超全局数组中。

    //test_1.php
    <?php   
    header("Content-type:text/html;charset=utf-8");
    session_start();
    $_SESSION['name']='beyond';
    $_SESSION['email']='1355036599@qq.com';
    echo '<a href="test_2.php">点击查看session</a>';
    var_dump($_SESSION);
    ?> 
    

     输出:

    array
      'name' => string 'beyond' (length=6)
      'email' => string '1355036599@qq.com' (length=17)
    

     二、查看session

    //test_2.php
    <?php
    header('Content-type:text/html, charset=utf-8');
    session_start();//若无此语句,则下一语句将会报错。
    var_dump($_SESSION);
    ?>
    

    和cookie几乎一样,都是用$_SESSION[]来访问,要访问name属性值,可用$_SESSION[name'];直接用$_SESSION是直接访问全部session。

    注意:在设置属性的页面,因为已有session_start(),所以访问的时候可以不用再加session_start();但是在其他页面访问该页面的session时,必须要先使用session_start(),否则$_SESSION中将无任何数据,并弹出错误。

    三、删除session

    删除session可以用php的unset()函数,要删除什么内容直接删除即可,比如删除name==>unset($_SESSION['name'])。

    也可以使用session_unset()函数,释放(删除)所有session。

    另外一种方法是使用session_destroy()函数,此函数会删除所有session.

    unset($_SESSION['name'])和session_destroy()都可以删除session,但是不会重置当前会话所关联的全局变量, 也不会重置会话 cookie,即在原页面依旧可以访问$_SESSION。 如果需要再次使用会话变量, 必须重新调用sesstion_start()函数。

    以session_destroy()为例。

    //test_3.php
    <?php   
    header("Content-type:text/html;charset=utf-8");
    session_start();
    $_SESSION['name']='beyond';
    $_SESSION['email']='1355036599@qq.com';
    echo '<a href="test_4.php">点击</a>';
    var_dump($_SESSION);
    
    //方法一
    //unset($_SESSION['name']);
    
    //方法二
    //session_unset();
    
    //方法三
    session_destroy();
    
    var_dump($_SESSION);
    ?> 
    

     输出:

    array
      'name' => string 'beyond' (length=6)
      'email' => string '1355036599@qq.com' (length=17)
    
    array
      'name' => string 'beyod' (length=6)
      'email' => string '1355036599@qq.com' (length=17)
    

     注意:此时使用了session_destroy()函数删除session,而$_SESSION中依旧保存着原session的所有值。如果是在其他页面访问该页面的session时,就会显示空。比如下面的代码,和上面的test_3.php配合。

    //test_4.php
    <?php
    header('Content-type:text/html, charset=utf-8');
    session_start();//若无此语句,则下一语句将会报错。
    var_dump($_SESSION);
    ?>
    

     输出:

    array
      empty
    

    注意几个函数的区别。

    拓展:

    其实session与cookie是有一定的联系的,请看下一段代码

    //test_5.php
    <?php   
    header("Content-type:text/html;charset=utf-8");
    session_start();
    $_SESSION['name']='beyond';
    $_SESSION['email']='1355036599@qq.com';
    var_dump(session_name()); //用于获取当前会话名称
    var_dump($_COOKIE);
    ?> 
    

     输出:

    string 'PHPSESSID' (length=9)
    
    array
      'PHPSESSID' => string 'mbncbb0qam7mtfug27sdq9e273' (length=26)
    

     可见创建的session会在cookie当中生成一个PHPSESSID的字符串,那么也就是说,我们可以利用删除cookie的PHPSESSID(也就是session_name())来删除session。

    如下段代码:

    //test_6.php
    <?php   
    header("Content-type:text/html;charset=utf-8");
    session_start();
    $_SESSION['name']='beyond';
    $_SESSION['email']='1355036599@qq.com';
    setcookie(session_name(),'',time()-3600,'/');
    header('location:test_4.php');
    ?> 
    

     test_4.php输出结果:

    array
      empty
    

    证明删除session成功。

    注意的是:用setcookie删除session时,参数增加了一个'/',代表的是path(路径),'/'表示的是在localhost(127.0.0.1)整个目录。同样的,用这种方法,删除session后,在原页面依旧可以访问$_SESSION,且值不为空。在其他界面为空。

  • 相关阅读:
    第一课 GCC入门
    第二课客户端链接Linux系统
    2014目标!!!!
    第一课Linux系统安装知识(2)
    android开发系列之ContentObserver
    android开发系列之数据存储
    android开发系列之视频断点续传
    稻盛和夫系列之活法一
    android开发系列之使用xml自定义控件
    android开发系列之MVP设计模式
  • 原文地址:https://www.cnblogs.com/-beyond/p/5621705.html
Copyright © 2011-2022 走看看