• PHP SESSION 操作


    Session的声明与使用

      Session的设置不同于Cookie,必须先启动,在PHP中必须调用session_start()。session_start()函数的语法格式如下:

      Bool session_start(void) //创建Session,开始一个会话,进行Session初始化

      注意:session_start()函数之前不能有任何输出

    注册一个会话变量和读取Session

      在PHP中使用Session变量,除了要启动之外,还要经过注册的过程。注册和读取Session变量,都要通过访问$_SESSION数组完成。在$_SESSION关联数组中的键名具有和PHP中普通变量相同的命名规则。注册Session变量的代码如下所示:

    <?php
    //启动session的初始化
    session_start();
    //注册session变量,赋值为一个用户的名称
    $_SESSION["username"]="skygao";
    //注册session变量,赋值为一个用户的ID
    $_SESSION["uid"]=1;
    ?>

    执行该脚本后,两个Session变量就会被保存在服务器端的某个文件中,该文件的位置是通过php.ini文件,在session.save_path属性指定的目录下。

    注销变量与销毁Session

      当使用完一个Session变量后,可以将其删除,当完成一个会话后,也可以将其销毁。如果用户退出Web系统,就需要为他提供一个注销的功能,把他的所有信息在服务器中销毁。销毁和当前Session有关的所有的资料,可以调用session_destroy()函数结束当前的会话,并清空会话中的所有资源。该函数的语法格式如下所示:

      bool session_destroy(void) //销毁和当前Session有关的所有资料

      该函数并不会释放和当前Session相关的变量,也不会删除保存在客户端Cookie中的Session ID。

      因为$_SESSION数组和自定义的数组在使用上是相同的,所以我们可以使用unset()函数来释放在Session中注册的单个变量。如下所示:

      unset($_SESSION['键名']);

      一定要注意,不要使用unset($_SESSION)删除整个$_SESSION数组,这样将不能再通过$_SESSION超全局数组注册变量了。但如果想把某个用户在Session中注册的所有变量都删除,可以直接将数组变量$_SESSION赋上一个空数组。如下所示:

      

      $_SESSION=array()

      PHP默认的Session是基于Cookie的,SessionID被服务器存储在客户端的Cookie中,所以在注销Session时也需要清除Cookie中保存的SessionID,而这就必须借助setCookie()函数完成。在PHP脚本中,可以通过调用session_name()函数获取Session名称。删除保存在客户端Cookie中的Session

      ID,代码如下所示:

    <?php
    //判断Cookie中是否存在session ID
    if(isset($_COOKIE[session_name()])){
        //删除包含Session ID的cookie,注意第四个参数一定要和php.ini设置的路径相同
        setcookie(session_name(),'',time()-3600,'/');
    }
    ?>

    通过前面的介绍可以总结出,Session的注销过程共需要4个步骤。在下例中,提供完整的四个步骤代码,运行该脚本就可以关闭Session,并销毁与本次会话有关的所有资源。代码如下所示:

    <?php
    //第一步:开启Session并初始化
    session_start();
     
    //第二部:删除所有Session的变量,也可以用unset($_SESSION[XXX])逐个删除
    $_SESSION = array();
     
    //第三部:如果使用基于Cookie的session,使用setCookkie()删除包含Session ID的cookie
    if(isset($_COOKIE[session_name()])) {
        setCookie(session_name(), "", time()-42000, "/");
    }
     
    //第四部:最后彻底销毁session
    session_destroy();
     
    ?>

    仔细讲解SESSION的删除

    第一种方式:unset($_SESSION['xxx']) 删除单个session,unset($_SESSION['xxx']) 用来unregister一个已注册的session变量。

    其作用和session_unregister()相同。

    session_unregister()在PHP5中已经废弃。

     php 官方删除session方式

        
    <?php
         // 初始化session.
         session_start();
         /*** 删除所有的session变量..也可用unset($_SESSION[xxx])逐个删除。****/
         $_SESSION = array();
         /***删除sessin id.由于session默认是基于cookie的,所以使用setcookie删除包含session id的cookie.***/
         if (isset($_COOKIE[session_name()])) {
            setcookie(session_name(), '', time()-42000, '/');
         }
         // 最后彻底销毁session.
         session_destroy();
    ?>

    unset($_SESSION) 此函数千万不可使用,它会将全局变量$_SESSION销毁,而且还没有可行的办法将其恢复。用户也不再可以注册$_session变量。

    第二种方式:session_unset() 或者 $_SESSION=array() 删除多个session

    第三种方式:session_destroy()结束当前的会话,并清空会话中的所有资源。该函数不会unset(释放)和当前session相关的全局变量(globalvariables),也不会删除客户端的session cookie.PHP默认的session是基于cookie的,如果要删除cookie的话,必须借助setcookie()函数。

    小结:

    session_destroy是注销所有的session变量,并且结束session会话;

    如果希望删除一些session数据,则可以使用unset()函数或session_destroy()函数。unset()函数的作用是释放指定的session变量,调用格式如下:

     
    1
    2
    3
    <?php
    unset($_SESSION['jugelizi']);
    ?>

    session_destroy()函数的作用是将session全部删除,调用格式如下:

     
    1
    <?PHP session_destroy(); ?>

    提示:session_destroy()会重新设置session,你会丢失所有已保存的session数据。

    session_unset()并不注销session变量,但把所有的session变量的值清空。

       
  • 相关阅读:
    资料-Java基础:多线程--创建启动线程的多种方式
    资料-Java基础:基础总结-运算符
    资料-Java基础:父子类加载过程
    总结提纲-逐渐补充
    资料-Java基础:类加载处理过程
    资料-Java基础:双亲委派模型
    资料-Java基础:类加载方式及差异
    转载:java 泛型详解-绝对是对泛型方法讲解最详细的,没有之一
    无法启动IIS Express web服务,端口正在使用!
    关于在本地新建数据库作业,无法成功的问题【本地SQLSERVER链接的服务器数据库】
  • 原文地址:https://www.cnblogs.com/xiaozhang666/p/11194210.html
Copyright © 2020-2023  润新知