下面的页面模拟登陆
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。这是我个人的理解,希望高人指点补充