Maison  >  Article  >  développement back-end  >  PHP Session管理

PHP Session管理

WBOY
WBOYoriginal
2016-08-08 09:21:04960parcourir
读取/设置当前缓存的到期时间
      int session_cache_expire ([ string $new_cache_expire ] )
      请求开始的时候,缓存到期时间会被重置为 180分钟,并且保存在 session.cache_expire 配置项中。 因此,针对每个请求,需要在 session_start() 函数调用之前 调用 session_cache_expire() 来设置缓存到期时间。如果给定 new_cache_expire ,就使用 new_cache_expire 的值设置当前缓存到期时间,以分钟为单位,默认值是 180 (分钟)。 
读取/设置缓存限制器
      string session_cache_limiter ([ string $cache_limiter ] )
      缓存限制器定义了向客户端发送的 HTTP 响应头中的缓存控制策略。 客户端或者代理服务器通过检测这个响应头信息来 确定对于页面内容的缓存规则。 设置缓存限制器为 nocache 会禁止客户端或者代理服务器缓存内容, public 表示允许客户端或代理服务器缓存内容, private 表示允许客户端缓存, 但是不允许代理服务器缓存内容。在 private 模式下, 包括 Mozilla 在内的一些浏览器可能无法正确处理 Expire 响应头, 通过使用 private_no_expire 模式可以解决这个问题:在这种模式下, 不会向客户端发送 Expire 响应头。 
获取/设置当前会话 ID
      string session_id ([ string $id ] )
      如果指定了 id 参数的值, 则使用指定值作为会话 ID。 必须在调用 session_start() 函数之前调用 session_id() 函数。 不同的会话管理器对于会话 ID 中可以使用的字符有不同的限制。 例如文件会话管理器仅允许会话 ID 中使用以下字符:a-z A-Z 0-9 , (逗号)和 - (减号) 。
读取/设置会话名称
      string session_name ([ string $name ] )
      session_name() 函数返回当前会话名称。 如果指定 name 参数, session_name() 函数会更新会话名称, 并返回 原来的 会话名称。请求开始的时候,会话名称会被重置并且存储到 session.name 配置项。 因此,要想设置会话名称,那么对于每个请求,都需要在 调用 session_start() 或者 session_register() 函数 之前调用 session_name() 函数。 会话名称至少需要一个字母,不能全部都使用数字, 否则,每次都会生成一个新的会话 ID。 
读取/设置当前会话的保存路径
      string session_save_path ([ string $path ] )
      指定会话数据保存的路径。 必须在调用 session_start() 函数之前调用 session_save_path() 函数。 在某些操作系统上,建议使用可以高效处理 大量小尺寸文件的文件系统上的路径来保存会话数据。 例如,在 Linux 平台上,对于会话数据保存的工作而言,reiserfs 文件系统会比 ext2fs 文件系统能够提供更好的性能。 
启动新会话或者重用现有会话
      bool session_start ( void )
      session_start() 会创建新会话或者重用现有会话。 如果通过 GET 或者 POST 方式,或者使用 cookie 提交了会话 ID, 则会重用现有会话。
销毁一个会话中的全部数据
      bool session_destroy ( void )

      session_destroy() 销毁当前会话中的全部数据, 但是不会重置当前会话所关联的全局变量, 也不会重置会话 cookie。 如果需要再次使用会话变量, 必须重新调用 session_start() 函数。为了彻底销毁会话,比如在用户退出登录的时候,必须同时重置会话 ID。 如果是通过 cookie 方式传送会话 ID 的,那么同时也需要 调用 setcookie() 函数来 删除客户端的会话 cookie。 

      1、session会判断当前是否有$_COOKIE[session_name()];session_name()返回保存session_id的COOKIE键值,这个值可以从php.ini找到。 如果不存在会生成一个session_id,然后把生成的session_id作为COOKIE的值传递到客户端.相当于执行了下面COOKIE 操作,注意的是,这一步执行了setcookie()操作,COOKIE是在header头中发送的,这之前是不能有输出的。PHP有另外一个函数 session_regenerate_id(), 如果使用这个函数,这之前也是不能有输出的。
        setcookie(session_name(), session_id(), session.cookie_lifetime,//默认0
                       session.cookie_path,//默认'/'当前程序跟目录下都有效
                       session.cookie_domain,//默认为空
                       )
      如果存在那么session_id =$_COOKIE[session_name()];然后去session.save_path指定的文件夹里去找名字为
'SESS_'.session_id()的文件.读取文件的内容反序列化,然后放到$_SESSION中.


      2、比如新添加一个值$_SESSION['test'] ='blah'; 那么这个$_SESSION只会维护在内存中,当脚本执行结束的时候,把$_SESSION的值写入到session_id指定的文件夹中,然后关闭相关资源. 

      3、SESSION发出去的COOKIE一般属于即时COOKIE,保存在内存中,当浏览器关闭后,才会过期,假如需要人为强制过期,比如 退出登录,而不是关闭浏览器,那么就需要在代码里销毁SESSION,方法有很多:
      1]. setcookie(session_name(),session_id(),time() -8000000,..);//退出登录前执行
      2]. usset($_SESSION);//这会删除所有的$_SESSION数据,刷新后,有COOKIE传过来,但是没有数据。
      3]. session_destroy();//这个作用更彻底,删除$_SESSION 删除session文件,和session_id。
      当不关闭浏览器的情况下,再次刷新,2和3都会有COOKIE传过来,但是找不到数据。

<?php // 初始化会话
    session_name(&#39;Session_test&#39;);
    session_id(&#39;safdsadfasdfsadfasdf&#39;);
    session_start();
    
    $_SERVER[&#39;user&#39;] = &#39;admin&#39;;
    echo $_SERVER[&#39;user&#39;]."<br>";
    
    echo $_COOKIE[session_name()];    
    
    //// 重置会话中的所有变量 -- 使用unset可以重置某个会话变量
//    $_SESSION = array();    
//    // 同时删除会话 cookie
//    if (ini_get("session.use_cookies")) 
//    {
//        $params = session_get_cookie_params();
//        setcookie(session_name(), '', time() - 42000,
//            $params["path"], $params["domain"],
//            $params["secure"], $params["httponly"]);    
//    }
//    // 最后,销毁会话
//    session_destroy(); 
?>




<meta charset="utf-8">
<title>无标题文档</title>





版权声明:本文为博主郎涯工作室原创文章,未经博主允许不得转载。

以上就介绍了PHP Session管理,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn