- 论坛徽章:
- 0
|
php.ini 设置:
session.save_handler = memcache
session.save_path = tcp://192.168.0.1:11211
前端缓存服务器nginx 设置:
upstream backend_server2 {
#ip_hash;
server server1:80 max_fails=2 fail_timeout=30s;
server server2:80 max_fails=2 fail_timeout=30s;
server server3:80 max_fails=2 fail_timeout=30s;
}
问题表现在:
第一次请求被调度到server1上,往_SESSION里写入几个值,第二次请求调度到server2/server3上,读不到之前设置的值;
测试脚本:- # cat stest.php
- <html><meta http-equiv='content-type' content='text/html; charset=UTF-8'/><pre>
- <?php
- error_reporting(E_ALL & ~E_NOTICE);
- ini_set("display_errors","On");
- session_start();
- function checkHSC() {
- print '<br><b>Hostname:</b> '.shell_exec('hostname').'<b>Now: </b>'.shell_exec('date +\'%Y-%m-%d %H:%M:%S\'').'<br>';
- print "<b>\$_SESSION :</b> \n";
- print_r ($_SESSION);
- print "\n<b>\$_COOKIE :</b> \n";
- print_r ($_COOKIE);
- }
- if (isset($_SESSION['testvar1']) and !empty($_SESSION['testvar1'])) {
- echo "<b><font color='green'>OK there is the value.</font></b>";
- checkHSC();
- } else {
- echo "<b><font color='red'>No value,setting new.</font></b>";
- $base64_alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
- for($i = 0; $i<15; $i++) {
- $str1 .= $base64_alphabet[rand(0,61)];
- }
- $_SESSION['testvar1'] = $str1;
- $_SESSION['var1ctime'] = date("Y-n-j H:i:s");
- checkHSC();
- }
- ?>
- <p><a href='stest2.php'>stest2.php</a>
- </html>
- #cat stest2.php
- <html><meta http-equiv='content-type' content='text/html; charset=UTF-8'/><pre>
- <?php
- error_reporting(E_ALL);
- ini_set("display_errors","On");
- session_start();
- function checkHSC() {
- print '<br><b>Hostname:</b> '.shell_exec('hostname').'<b>Now: </b>'.shell_exec('date +\'%Y-%m-%d %H:%M:%S\'').'<br>';
- print "<b>\$_SESSION :</b> \n";
- print_r ($_SESSION);
- print "\n<b>\$_COOKIE :</b> \n";
- print_r ($_COOKIE);
- }
- checkHSC();
- ?>
- <p><a href='stest.php'>stest.php</a>
- </html>
复制代码 |
|