• cookie,session机制


    下面的页面模拟登陆

     1 <?php
     2 $time = time()+60*3600; //cookie过期时间
     3 session_start(); //开启session
     4 $session_id = session_id(); //取session_id
     5 $_SESSION['name'] = 'kevin'; //模拟登陆成功,设置用户名
     6 session_commit(); //关闭session文件
     7 setcookie('session_id',$session_id,$time); //向浏览器发送cookie session_id
     8 setcookie('name','kevin',$time-60*3600);
     9 
    10 var_dump($_COOKIE);
    11 var_dump($_SESSION);

    其中session_commit();很关键,假如当前页面执行时间过长,同时用户打开其他页面,session文件会处于占用中。其他页面会处于等待状态,这样,在session文件在使用完之后及时关闭就可以避免。

    同样,在session文件关闭后赋值$_SESSION也会出现超时情况

    1 <?php
    2 var_dump($_COOKIE);
    3 $session_id = $_COOKIE['session_id']; //取得cookie中的session_id
    4 session_id($session_id); //取出session_id这个session文件
    5 session_start();
    6 var_dump($_SESSION);

    登录之后用户每次发起的请求中都包含之前设置好的session_id,用来验证。也有可能浏览器关闭保存cookie导致无法使用session的情况。

    一般session是保存文件中的,大型网站登录人数会非常多。这样设置的时候,可以在session前面加前缀,取session的时候,根据前缀,去对应的目录结构下取session文件。

    如果人数继续增加,对文件io压力会增加,可以使用缓存机制来保存session。这是我个人的理解,希望高人指点补充

  • 相关阅读:
    Hashtable,挺爽的一个东西,大家都用烂了吧,我再画蛇添足一下。
    今天你写控件了吗?ASP.net控件开发系列(八)
    Attribute在运行期赋值?
    整几个题给大家玩玩,看看“下盘功夫”怎样
    当stringFormat碰上{和}
    一句SQL语句解决倒序数据分页提取
    C#扩展一般用于linq
    字符串转日期类型
    Dispatcher与UI线程交互
    圆形进度条
  • 原文地址:https://www.cnblogs.com/warmsun/p/7732906.html
Copyright © 2020-2023  润新知