session_id用途及妙用

浏览器禁用了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()之后
 ?>
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值