将Session放入Redis
默认情况下,我们的PHP是以文件的形式保存Session数据,所以,每次读写会话信息,就需要去访问硬盘。
为了解决会话信息夸域名问题,即为了实现同一时刻只能一个地方登录,同时也解决读写会话信息必须访问磁盘问题,我想到了,将Session保存到Redis中。
下面贴代码:
sessionRedis::setSessionHandler();
class sessionRedis{
public static $redis; public static function sessionOpen($savePath,$sessionName){
self::$redis = new Redis();
self::$redis->connect(RedisHost,RedisPort);
self::$redis->select(3); return true;
} public static function sessionClose(){
return true;
} public static function sessionRead($sessionId){
$data = self::$redis->get($sessionId); return $data;
} public static function sessionWrite($sessionId,$data){
$userId = self::getUserId();
if(!empty($userId)){
$ukey = 'uid' . $userId;
if(self::$redis->hExists('uid',$ukey)){
$ssid = self::$redis->hGet('uid',$ukey);
self::sessionDestroy($ssid);
}
self::$redis->hSet('uid',$ukey,$sessionId);
}
//$cache_expire = session_get_cookie_params();
$cache_expire = ini_get("session.gc_maxlifetime");
self::$redis->setex($sessionId,$cache_expire,$data); return true;
} public static function sessionDestroy($sessionId){
self::$redis->del($sessionId); return true;
} public static function sessionGC($maxlifetime){
//self::$redis->persist(); return true;
} public static function setSessionHandler(){
session_set_save_handler(
array(__CLASS__,"sessionOpen"),
array(__CLASS__,"sessionClose"),
array(__CLASS__,"sessionRead"),
array(__CLASS__,"sessionWrite"),
array(__CLASS__,"sessionDestroy"),
array(__CLASS__,"sessionGC")
); return true;
} /*
这里获取登录的用户ID
*/
public static function getUserId(){
return isset($_SESSION['n_userId']) ? $_SESSION['n_userId'] : 0;
}
}
主要目的是用了实现一个帐号只能在一个地方登录,如果相同的帐号在别处再次登录,前一次登录的会话数据将被清掉!
代码简洁高效,是我的风格,哈哈!
目前PHP已经原生支持将session存入Redis里,所以,如果只是简单的把session信息保存至Redis里,只需要在php配置文件里设置一下
session.save_handler = redis
session.save_path = "tcp://host1:6379?weight=1, tcp://host2:6379?weight=2&timeout=2.5, tcp://host3:6379?weight=2"
这样就ok 了!
将Session放入Redis的更多相关文章
- session放入缓存(redis)、DB
为什么要把SESSION保存在缓存 就php来说,语言本身支持的session是以文件的方式保存到磁盘文件中,保存在指定的文件夹中,保存的路径可以在配置文件中设置或者在程序中使用函数session_s ...
- springboot项目中的普通Session和使用redis存储session
普通session: session store type使用来存放session的存储方式,目前Spring boot中只支持Redis方式, 由于本应用暂无需将session放入redis的需求, ...
- session放数据库里解决丢失的问题
在编程里是会话的意思Session 对象存储特定用户会话所需的信息.这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去. ...
- 不使用session,借助redis实现验证码
1.首先看一下基本的流程 2.看一下代码 注:其中用到的一些工具类,可以到我的github上去下载 https://github.com/hjzgg/usually_util/tree/master ...
- 在查询时将查询条件放入Session中,导出时直接根据qpniRGaFiler取查询条件即可
在查询时将查询条件放入Session中,导出时直接根据qpniRGaFiler取查询条件即可
- 怎么样把ModelMap里面的数据放入Session里面?
答:可以在类上面加上@SessionAttributes注解,里面包含的字符串就是要放入session里面的key.
- Linux 将进程放入后台执行,解决网络,ssh断开导致进程结束(nohup, setsid, &, disown)
Linux 将进程放入后台执行,解决网络,ssh断开导致进程结束(nohup, setsid, &, disown) 1.nohup 命令 我们知道,当用户注销(logout)或者网络断开 ...
- EC笔记:第三部分:17、使用独立的语句将newed对象放入智能指针
一般的智能指针都是通过一个普通指针来初始化,所以很容易写出以下的代码: #include <iostream> using namespace std; int func1(){ //返回 ...
- tuple放入dict中
tuple放入dict中是否可以正常运行 # 将tuple放入dict中 a = ('AI','Kobe','Yao') b = ('AI',['Kobe','Yao']) dict1 = {'a': ...
随机推荐
- 常见 Java 异常解释(恶搞版)
常见 Java 异常解释:(译者注:非技术角度分析.阅读有风险,理解需谨慎o(╯□╰)o) java.lang ArithmeticException 你正在试图使用电脑解决一个自己解决不了的数学问题 ...
- CodeForces798-B. Mike and strings-string中的find()函数
好久好久好久之前的一个题,今天翻cf,发现这个题没过,补一下. B. Mike and strings time limit per test 2 seconds memory limit per t ...
- sscanf()用法
http://blog.chinaunix.net/uid-26284412-id-3189214.html #include<cstdio> #include<cstring> ...
- Windows下MYSQL读取文件为NULL
只记录解决问题的方法. mysql 版本: 5.7.18 问题: 在执行mysql 函数load_file时,该函数将加载指定文件的内容,存储至相应字段.如: SELECT LOAD_FILE(&qu ...
- [国嵌攻略][149][Yaffs2文件系统应用]
嵌入式系统自启动 MTD技术通过把Nand FLash划分成bootloader分区,Linux kernel分区和file system分区来达到自启动的效果. 配置和编译内核 1.配置Linux内 ...
- 浅谈event.client、event.screen与event.offset
每每看到event.client.event.screen与event.offset这几个,头都大了,今天又碰到了,特来总结下. 1.event.screenX与event.screenY. 首先,e ...
- N的N次方
题目描述 现给你一个正整数N,请问N^N的最左边的数字是什么? 输入 输入包含多组测试数据.每组输入一个正整数N(N<=1000000). 输出 对于每组输入,输出N^N的最左边的数字. 样例输 ...
- javascript alert乱码的解决方法
http://www.jb51.net/article/42805.htm 提示时中文乱码,拼音什么的都没有问题呀,下面我在论坛找到一解决办法,下面与大家分享. 解决办法一: 复制代码 代码如下: e ...
- css3图片动画旋转
body{ background-color:#021E36; text-align: center; } .container{margin:500px auto;} .round{position ...
- IOS学习:隐藏键盘方法
1.点击界面的其它空白地方隐藏 由于UIViewController是继承自UIResponder的,所以可以覆写- (void)touchesBegan:(NSSet *)touches ...