session存储用户信息的实现

1.与其他用户状态保存方案比较

一般开发中用户状态使用session或者cookie,两种方式各种利弊。

Session:在InProc模式下容易丢失,并且引起并发问题。如果使用SQLServer或者SQLServer模式又消耗了性能

Cookie则容易将一些用户信息暴露,加解密同样也消耗了性能。

Redis采用这样的方案解决了几个问题,

1.Redis存取速度快。

2.用户数据不容易丢失。

3.用户多的情况下容易支持集群。

4.能够查看在线用户。

5.能够实现用户一处登录。(通过代码实现,后续介绍)

6.支持持久化。(当然可能没什么用)

2.实现思路

1.我们知道session其实是在cookie中保存了一个sessionid,用户每次访问都将sessionid发给服务器,服务器通过ID查找用户对应的状态数据。

在这里我的处理方式也是在cookie中定义一个sessionid,程序需要取得用户状态时将sessionid做为key在Redis中查找。

2.同时session支持用户在一定时间不访问将session回收。

借用Redis中Keys支持过期时间的特性支持这个功能,但是在续期方面需要程序自行拦截请求调用这个方法(demo有例子)

以sessionid作为key,把session数据作为value存储到Redis内存数据库

php 代码实现
  1. <?php

  2. session_start();

  3. //假设用户登录成功获得了以下用户数据

  4. $userinfo = array(

  5. 'uid' => 10000,

  6. 'name' => 'spark',

  7. 'email' => 'spark@imooc.com',

  8. 'sex' => 'man',

  9. 'age' => '18'

  10. );

  11. header("content-type:text/html; charset=utf-8");

  12.  
  13. /* 将用户信息保存到session中 */

  14. $_SESSION['uid'] = $userinfo['uid'];

  15. $_SESSION['name'] = $userinfo['name'];

  16. $_SESSION['userinfo'] = $userinfo;

  17.  
  18. //* 将用户数据保存到cookie中的一个简单方法 */

  19. $secureKey = 'imooc'; //加密密钥

  20. $str = serialize($userinfo); //将用户信息序列化

  21. //用户信息加密前

  22. $str = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($secureKey), $str, MCRYPT_MODE_ECB));

  23. //用户信息加密后

  24. //将加密后的用户数据存储到cookie中

  25. setcookie('userinfo', $str);

  26.  
  27. //当需要使用时进行解密

  28. $str = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($secureKey), base64_decode($str), MCRYPT_MODE_ECB);

  29. $uinfo = unserialize($str);

  30. echo "解密后的用户信息:<br>";

  31. print_r($uinfo);

  32. ?>

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值