浏览器禁用了cookie
客户端(浏览器)禁用了cookie,那么服务器端变不会接收到session id,此时需要显示传递session id了。两种方法:手动通过URL传递session id;隐藏表单传递session id。上述两种方法需要服务端的php环境中session.use_trans_sid 值为 1。
<?php
session_start();
$_SESSION['arr'] = array('name' => 'molaifeng', 'hobby' => 'php');
?>
<a href="testSession.php?session_id=<?php echo session_id()?>">testSession</a>
接受数据时
<?php
session_id($_REQUEST['session_id']);
session_start();
print_r($_SESSION);
一般情况下出现跨页面session失效,基本上是上述列出的几点。
1、session.save_path有误,如权限不够,或是目录不存在;
2、服务器php配置中的session.use_trans_sid值为0;
3、客户端禁用了cookie。
多服务器共享session问题
当一个网站的用户量过大,就会使用服务器集群,例如专门有一个登录用的服务器。 用户通过登录服务器登录之后,登录服务器保存了用户的登录信息session,而其他受访问的服务器,例如电影服务器没有这个session,那么我们就 要通过一个session的唯一标识来共享这个session了。
我们可以把sessionid保存在数据库中得以实现,数据库可以设置如下
CREATE TABLE `dh2y_session` (
`id` int(11) NOT NULL ,
`session_id` varchar(60) NOT NULL ,
`addtime` int(11) NOT NULL ,
`expire` int(11) NOT NULL ,
PRIMARY KEY (`id`)
)
验证同一用户的不同会话
一个用户并非通过浏览器来请求连接,而是通过socket或者其它方式来请求 数据的时候,我们首先要对他进行用户登录验证,验证成功之后,就下发一个sessionid给他,然后他每次请求的时候就携带这个sessionid,我 们通过这个sessionid来判断session是否已经存在,如果存在我们就认定用户已经登录
首先验证的时候产生一个sessionid;
<?php
Session_start();
$sessionId = session_id();//得到sessionid
//将session下发给客户端
.........
?>
客户端携带sessionid这个变量来请求数据
<?php
Session_id(‘$sessionid’);//注意这个时候session_id()这个函数是带有参数的
Session_start();//这个函数必须在session_id()之后
?>