zoukankan      html  css  js  c++  java
  • Session

    Session默认通过文件形式存储

    当用户访问首次服务端时(不管你是否访问session)都会自动生成一个PHPSESSID 并存入Cookie 键名为PHPSESSID
    存的一个a0rj6402d7v7qgk62k76nkiha2这种值
    可以直接 echo $_COOKIE['PHPSESSID']; 查看此值
    这个值有什么用呢?

    这个值就是服务端session文件的文件名 ( 去掉sess_部分 )
    当你访问服务端则自动生成一个PHPSESSID 这时服务端的对应session文件并不存在
    而是当你首次执行session_start();时根据之前生成的PHPSESSID值自动创建一个session文件
    文件名为: sess_加上之前生成的PHPSESSID值 : sess_a0rj6402d7v7qgk62k76nkiha2

    当以后设置或读取session时
    都会将此PHPSESSID值发送给服务器到服务器的session目录下找到对应的session文件进行操作
    为什么关闭浏览器后$_SESSION中值会消失?

    上面说到每次操作session都会把PHPSESSID传给服务器 然后到服务器的session目录下寻找对应session文件
    PHPSESSID是存于Cookie中的 默认是没设置有效时间
    也就是关闭浏览器后就自动删除了PHPSESSID
    所以当下次在打开浏览器时无法找到PHPSESSID
    如果PHPSESSID不存在了 则会自动重新分配一个新的PHPSESSID
    所以之前的$_SESSION中的值就找不到了

    也就是说每一次会话(重新打开浏览器为一次会话)会产生一个新的PHPSESSID
    也就会重新创建一个以新PHPSESSID命名的session文件 之前的session不再继续使用

    那么如果我们手动去设置PHPSESSID的有效期呢
    这样不就可以在下次重新打开浏览器时仍然可以找到PHPSESSID么

    setCookie(session_name(),session_id(),time()+86400);
    这样当关闭浏览器后 下次访问时仍然可以找到PHPSESSID 也就可以继续访问到$_SESSION中的值了

    session_name() 表示sessionid的名字 也就是 PHPSESSID
    session_id() 表示sessionid的值 也就是 $_COOKIE['PHPSESSID']的值

    也可以通过 session_set_cookie_params(800); 函数设置session有效期 单位秒
    放在 session_start(); 之前执行

    当然你也可以把这个PHPSESSID值存入数据库
    然后通过session_id($sessionid);设置PHPSESSID
    客户端禁用了Cookie

    其实这种用户可以直接忽略掉

    禁用Cookie则无法存储PHPSESSID 所以每次都会因为找不到PHPSESSID 自动重新分配新的PHPSESSID

    如果你理解了上面几段话 应该能想出解决办法
    删除session

    删除单个session
    unset($_SESSION['xmg']);

    删除所有session ( 删除当前内存中的所有session值 但不会删除session文件和释放sessionid )
    session_unset();

    释放此次会话的全部资源 ( 删除session文件 释放sessionid 但不会释放内存中的$_SESSION值 )
    session_destroy();

    也就是说执行session_unset()后就立即无法在访问$_SESSION中的数据了
    而执行session_destroy()不会释放内存中的$_SESSION值 $_SESSION在本线程仍然可以访问

    所以如果想删除所有session 执行 :
    session_unset();
    session_destroy();

    不要尝试这样删除session : unset($_SESSION); 没这种写法 也删不掉session

  • 相关阅读:
    Tosca IE 浏览器的Internet Options 配置, 解决login很慢的问题
    Tosca 注意事项(持续更新)
    Tosca database help link
    Tosca TestCases: Update all,Checkin all,Checkout,Checkout Tree
    Tosca Connection Validation error:40
    Tosca new project Repository as MS SQL Server
    【笔记4】用pandas实现条目数据格式的推荐算法 (基于用户的协同)
    【笔记3】用pandas实现矩阵数据格式的推荐算法 (基于用户的协同)
    【笔记2】推荐算法中的数据格式
    【笔记1】如何预测用户对给定物品的打分?
  • 原文地址:https://www.cnblogs.com/xin-jun/p/8461592.html
Copyright © 2011-2022 走看看