基于Apache(Windows 10、CentOS 6.5)、Redis(CentOS 6.5)的用户session会话的分布式实现流程
1、前提,Windows 8.1下Redis的安装,且配置支持php的实现流程:http://www.shuijingwanwq.com/2015/11/16/769/
设置Redis服务器允许通过哪些IP进行访问及密码,如图1、2:
bind 127.0.0.1 192.168.2.30
requirepass n#S7yLE$R5s&Mmp#W9K9*HjZApTU%hpQ
命令:service redis restart,重启Redis服务;
2、设置web服务器的php.ini,如图3:
; session.save_handler = files
session.save_handler = redis
; session.save_path = “/tmp”
; session.save_path = “D:/phpsessiontmp”
session.save_path = “tcp://192.168.2.30:6379?auth=n#S7yLE$R5s&Mmp#W9K9*HjZApTU%hpQ”
高强度的散列函数可以产生高强度的会话 ID。 虽然即使是使用 MD5 散列算法,要找到相同的散列值也是非常不易的, 但是开发人员还是应该选择 SHA-2 或者更高的散列算法, 例如可以使用 sha384 或者 sha512。
; session.hash_function = 0
session.hash_function = “sha512″
重启Apache服务;
生成:PHPSESSID:”llg6i9ddv0m012ajrhki8nn675q42an11k87sjaqd8lj53bnelb32v4gvkh7fn3pelp9eec8os1tk430aqp45tj1uisg6sgfk0qeer2”
3、编辑phpRedisAdmin配置文件,且正常运行,如图4、5:
$config = array(
‘servers’ => array(
array(
‘name’ => ‘local server’, // Optional name.
‘host’ => ‘192.168.2.30’,
‘port’ => 6379,
‘filter’ => ‘*’,
// Optional Redis authentication.
‘auth’ => ‘n#S7yLE$R5s&Mmp#W9K9*HjZApTU%hpQ’ // Warning: The password is sent in plain-text to the Redis server.
),
4、编写测试程序,如图6:
<?php
//header(“Content-type: text/html; charset=utf-8”);
session_start();
$_SESSION[‘count’] = 1;
echo $_SESSION[‘count’];
?>
5、测试报错,如图7:
Fatal error: Uncaught exception ‘RedisException’ with message ‘Failed to AUTH connection’ in E:\wwwroot\phpinfo.php:4 Stack trace: #0 E:\wwwroot\phpinfo.php(4): session_start() #1 {main} thrown in E:\wwwroot\phpinfo.php on line 4
Fatal error: Uncaught exception ‘RedisException’ with message ‘Failed to AUTH connection’ in [no active file]:0 Stack trace: #0 {main} thrown in [no active file] on line 0
6、解决方案,重新修改密码,且其中不能够包含特殊字符,只允许数字与字母,得以解决,测试程序运行正常,如图8:7、然后在web服务器操作系统为CentOS上也准备实现session存放于Redis中,执行命令,如图9:
php -m
查看是否已经安装php-redis扩展(或者可以查看phpinfo(),如图10),如果没有,则执行命令,如图11:
yum install php-redis
8、设置web服务器的php.ini,如图12、13:
; session.save_handler = files
session.save_handler = redis
; session.hash_function = 0
session.hash_function = “sha512”
重启Apache服务;
9、编辑/etc/httpd/conf.d/php.conf,如图14
# php_value session.save_handler “files”
# php_value session.save_path “/var/lib/php/session”
php_value session.save_handler “redis”
php_value session.save_path “tcp://192.168.2.30:6379?auth=2LMDCDh7CfWhJGC9bAuercMEZYULs25y”
重启Apache服务;
10、此时基于CentOS上的web服务器用户登录已经可以正常运行,只是PHPSESSID仍然为md5加密的,而并非sha512,原因在于在浏览器端还存在cookie:PHPSESSID,如图15、16
11、如果浏览器端不存在名为PHPSESSID的cookie的话,则PHPSESSID则为sha512加密的,如图17
近期评论