zoukankan      html  css  js  c++  java
  • SESSION的使用

    session和cookie相似,都用来存储使用者的资料。最大不同是session存储在服务器端,cookie存储在浏览器端

    当某个用户向web服务器发送请求时,服务器首先检查这个客户端的请求里是否已经包含了一个Session ID 如果包含,说明之前已经为此用户创建过Session,服务器则按该Session ID把Session检索出来使用。如果客户端请求不包含Session ID,则为该用户创建一个Session,并且生成一个与此Session关联的Session ID,本次相应被传送到客户端保存。

    Session会在一定时间内保存在服务器上。当访问增多,会比较占用服务器的性能。(每调用一次session_start()函数,服务器中的sess_开头的文件便新创建一个)

    Session自动回收机制:

    直接关闭浏览器后,服务器端保存的Session文件是不会被删除的,但下次打开浏览器登陆原网页时,会重新分配Session ID

    用session.cookie_lifetime=0,设置Session ID在浏览器Cookie中的有效期。0表示知道浏览器关闭,Session ID才会消失。

    用session.gc_maxlifetime选项来指定一个时间,当网页刷新或加载后,会更改session文件的时间,“垃圾回收程序”启动后会在所有session文件中排查,删除修改时间距离当前系统时间大于session.gc_maxlifetime设置值的session文件(只是将文件设置为空,并不删除文件)。

    Session ID的传递:

    1、cookie方式传递

    例:

     1 <?php
     2   session_start();
     3   function clearcookie()
     4   {
     5     foreach($_COOKIE as $key=>$val)
     6       setcookie($key,'',time()-1);
     7   }
     8 
     9   function clearsession()
    10   {
    11     $_SESSION=array();
    12     setcookie(session_name(),'',time()-1);
    13     session_destroy();
    14   }
    15 
    16   if($_GET["action"]=="setsess")
    17   {
    18     $key=$_POST['session_name'];
    19     $value=$_POST['session_value'];
    20     $_SESSION["{$key}"]="{$value}";
    21   }else if($_GET["action"]=="discook"){
    22     print_r($_COOKIE);
    23   }else if($_GET["action"]=="dissess"){
    24     print_r($_SESSION);
    25   }else if($_GET["action"]=="deletecook"){
    26     clearcookie();
    27   }else if($_GET["action"]=="deletesess"){
    28     clearsession();
    29   }
    30 ?>
    31 <html>
    32 
    33   <form action="session.php?action=setsess" 
    34 
    35 method="post">
    36     <input type="text" name="session_name"/>
    37     <input type="text" name="session_value"/><br>
    38     <input type="submit" value="setSession"/>
    39   </form>
    40 
    41   <br>
    42   <br>
    43   <br>
    44 
    45   <form action="session.php?action=discook" 
    46 
    47 method="post">
    48     <input type="submit" value="disCookie"/>
    49   </form>
    50 
    51   <br>
    52   <br>
    53   <br>
    54 
    55   <form action="session.php?action=dissess" 
    56 
    57 method="post">
    58     <input type="submit" value="disSession"/>
    59   </form>
    60   <br>
    61   <br>
    62   <br>
    63 
    64   <form action="session.php?action=deletecook" 
    65 
    66 method="post">
    67     <input type="submit" value="deleteCookie"/>
    68   </form>
    69   <br>
    70   <br>
    71   <br>
    72 
    73   <form action="session.php?action=deletesess" 
    74 
    75 method="post">
    76     <input type="submit" value="deleteSession"/>
    77   </form>
    78 </html>
    cooksess.php

    2、浏览器禁用cookie后,可用URL方式传递

    例:

     1 <?php
     2   $sid=!empty($_GET[session_name()])?$_GET[session_name()]:'';
     3   session_id($sid);
     4   session_start();
     5 ?>
     6 
     7 <html>
     8   <a href="urlsess2.php?<?php echo session_name().'='.session_id()?>">page2</a>
     9   <a href="urlsess3.php?<?php echo session_name().'='.session_id()?>">page3</a>
    10 </html>
    urlsess.php
    1 <?php
    2   $sid=!empty($_GET[session_name()])?$_GET[session_name()]:'';
    3   session_id($sid);
    4   session_start();
    5   echo session_name().'='.session_id();
    6 ?>
    urlsess2.php
    1 <?php
    2   $sid=!empty($_GET[session_name()])?$_GET[session_name()]:'';
    3   session_id($sid);
    4   session_start();
    5   echo session_name().'='.session_id();
    6 ?>
    urlphp3.php
  • 相关阅读:
    java中的单例模式
    数组的冒泡排序
    2019年总结—即将而立之年的90后
    圣诞节开启博客之旅
    分布式多线程的Lock示例
    抽象工厂模式
    观察者模式
    建造者模式
    外观模式(Facade)
    模板方法模式
  • 原文地址:https://www.cnblogs.com/Mr-Wenyan/p/8845946.html
Copyright © 2011-2022 走看看