URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID8
Нить номер: 4608
[ Назад ]

Исходное сообщение
"проблема сессий, дубль sess_* файлов на сесию"

Отправлено wawont , 09-Янв-07 16:26 
Привет.

Образовалась странная проблема с сессиями:
на стороне сервера на образуется два файла сессии на запрос одного браузера.
один пустой, второй содержит информацию о переменных, но при этом, при обращении к другой странице, воспринимается именно пустой файл.

Подскажите кто что заметил (пример с описанием ниже), а то я даже не понял из-за чего все перестало работать. Просто перезагрузил сервер и началась такая "ботва".

Простой пример из доков:
page1.php:

<?php                                                                                                                      
// page1.php                                                                                                                
                                                                                                                            
session_start();                                                                                                            
                                                                                                                            
echo 'Welcome to page #1';                                                                                                  
                                                                                                                            
$_SESSION['favcolor'] = 'green';                                                                                            
$_SESSION['animal']  = 'cat';                                                                                              
$_SESSION['time']    = time();                                                                                              
                                                                                                                            
// Works if session cookie was accepted                                                                                    
echo '<br /><a href="page2.php">page 2 cookie</a>';                                                                                
                                                                                                                            
// Or maybe pass along the session id, if needed                                                                            
echo '<br /><a href="page2.php?' . SID . '">page 2 get</a>';                                                                    
?>

page2.php:

<?php                                                                                                                      
// page2.php                                                                                                                
                                                                                                                            
session_start();                                                                                                            
                                                                                                                            
echo 'Welcome to page #2<br />';                                                                                            
                                                                                                                            
echo $_SESSION['favcolor']; // green                                                                                        
echo "<br>";                                                                                                                
echo $_SESSION['animal'];  // cat                                                                                          
echo "<br>";                                                                                                                
echo date('Y m d H:i:s', $_SESSION['time']);                                                                                
echo "<br>";                                                                                                                
echo SID;                                                                                                                  
                                                                                                                            
// You may want to use SID here, like we did in page1.php                                                                  
echo '<br /><a href="page1.php">page 1</a>';                                                                                
?>

Вывод при нажатии на ссылку "page 2 cookie":
Welcome to page #2

Notice: Undefined index: favcolor in /var/www/htdocs/tour/test/page2.php on line 8


Notice: Undefined index: animal in /var/www/htdocs/tour/test/page2.php on line 10


Notice: Undefined index: time in /var/www/htdocs/tour/test/page2.php on line 12
1970 01 01 07:00:00
PHPSESSID=70ffc19ccfdf46a850fe3b91d8bee36f
page 1

То есть переменные сесии не передались...

Вывод при нажатии на ссылку "page 2 get":

Welcome to page #2
green
cat
2007 01 09 19:09:44
PHPSESSID=82cf963c56fb59059892367b128978f2
page 1

PHP Version 4.4.4
Кусок php.ini:

register_globals = off
...
[Session]
session.save_handler = files
session.use_cookies = 1
session.name = PHPSESSID
session.auto_start = 0
session.cookie_lifetime = 1800
session.cookie_path = /tmp
session.cookie_domain =
session.serialize_handler = php
session.gc_probability = 1                                                      
session.gc_divisor     = 1000
session.gc_maxlifetime = 1440
session.bug_compat_42 = 0                                                      
session.bug_compat_warn = 1
session.referer_check =
session.entropy_length = 1
session.entropy_file =
session.cache_limiter = nocache
session.cache_expire = 180
session.use_trans_sid = 0
url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=fakeentry"

$ ls -l
...
drwxrwxrwt  76 root   root    7472 2007-01-09 19:09 tmp
...

$ ls -l /tmp/sess_*
-rw------- 1 www-data www-data  0 2007-01-09 19:17 sess_70ffc19ccfdf46a850fe3b91d8bee36f
-rw------- 1 www-data www-data 56 2007-01-09 19:17 sess_7120461440b7b1a6dfe5fa777dbe993d

$ cat sess_7120461440b7b1a6dfe5fa777dbe993d
favcolor|s:5:"green";animal|s:3:"cat";time|i:1168348677


Содержание

Сообщения в этом обсуждении
"проблема сессий, дубль sess_* файлов на сесию"
Отправлено wawont , 10-Янв-07 17:35 
Ох и долго я голову ломал.
А причина оказалась простой... Как обычно :)
session.cookie_path = /tmp

эта дириктива указывает что куки работают только в директории tmp
в корневой директории документов сервера, короче DocumentRoot "/var/www/htdocs"

другими словами при такой директиве куки работают только для страниц которые лежат внутри
/var/www/htdocs/tmp

Ну рад буду если комуто помог.

Да! загадка осталась только одна: непосредственно перед перезагрузкой сервера
php.ini я не трогал и не помню чтобы была необходимость менять что-то в разделе сессий раньше.
Ну всеже похоже менял...

Всем наискорейшего и осмысленного решения проблем!