设置会话有效期

在大多数网站和应用程序中需要限制会话的时间,如12个小时、一个星期、一个月等,这时就需要设置Session会话的有效期限,过了有效期限,用户会话就被关闭。

  1. 客户端没有禁止Cookie使用session_set_cookie_params()设置Ses-sion的失效时间,此函数是Session结合Cookie设置失效时间,如果设置Session在1分钟后失效,则实现的代码如下:<?php$time = 60;session_set_cookie_params($time);session_start();$_SESSION["unsename"] = 'Mr';?>session_set_cookie_params()必须在ses-sion_start()之前调用。不过不推荐使用该函数,此函数在浏览器上会出现问题,所以一般手动设置失效时间。

    【示例1】手动设置失效时间的代码如下:<?phpsession_start();$time = 60;setcookie(session_name(),session_id(),time()+$time,"/"); //手动设置会话失效时间$_SESSION["unsename"] = 'Mr';?>session_name表示Session的名称,ses-sion_id表示客户端用户的标识,因为session_id是随机产生的唯一名称,所以Session是相对安全的,失效时间和Cookie的失效时间一样,最后一个参数为可选参数,是放置Cookie的路径。

  2. 客户端禁止Cookie当客户端禁用Cookie时,Session页面间传递会失效,解决这个问题有4种方法。   

    •在登录之前提醒用户必须开启Cookie,这是很多论坛的做法。   

    •设置php.ini文件中的session.use_trans_sid = 1,或者编译时打开-enable-trans-sid选项,让PHP自动跨页传递session_id。   

    •通过GET方法,使用隐藏域传递session_id。

      •使用文件或者数据库存储session_id,在页面传递中手动调用。第二种情况比较被动,因为普通开发者是无法修改服务器中的php.ini配置文件,第三种情况就不可以使用Cookie设置保存时间,但是登录情况没有变化,第四种情况比较重要,特别是在企业级开发中经常使用到。

【示例2】下面代码演示了以第三种方法使用GET方式进行传递:<form  method="post" action="session1.php?<?=session+name();?>=<?=session_id();?>">     用户名:<input type="text" name="user" size="20"><br />     密 码:<input type="password" name="password" size="20"><br />     <input type="submit" value="提交" /></form>

然后,在session1.php文件中设置要接收ses-sion_id值,并进行处理,示例代码如下:

<?php$sess_name = session_name();      //获取Session名称$sess_id = $_GET[$sess_name];     //以GET方式获取session_idsession_id($sess_id);             //把session_id值存储到Session对象中session_start();$_SESSION["admin"] = "Mr";?>

网站建设、网络营销咨询专线:0871-63535511(点击可一键拨号)