|
|
|
| Собственно всё работает, но вторичный вызов session_start() плюёт такую ошибку:
Fatal error: session_start() [<a href='http://www.php.su/functions/?function.session-start'>function.session-start</a>]: Failed to initialize storage module: user (path: ./) in T:\home\virtual\yandex.ru\test.php on line 57
|
Вот сам код:
<?php
define('DB_HOST', 'localhost');
define('DB_USER', 'root');
define('DB_PASS', '');
define('DB_NAME', 'sms');
if (mysql_connect(DB_HOST, DB_USER,DB_PASS) === false)die(mysql_error());
if (mysql_select_db(DB_NAME) === false)die(mysql_error());
mysql_query('CREATE TABLE IF NOT EXISTS `sms_sessions` (
`sid` varbinary(20) NOT NULL,
`upd_time` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
`data` blob NOT NULL,
PRIMARY KEY (`sid`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;');
function random_str($len, $symbols = 'abcdefghigklmnopqrstuvwxyzABCDEFGHI GKLMNOPQRSTUVWXYZ0123456789'){
$str = '';
$symbols = str_shuffle($symbols);
$symbols_count = strlen($symbols);
for($i = 0; $i < $len; $i++)$str .= $symbols[rand(0, $symbols_count - 1)];
return $str;
}
function sess_open($save_path, $session_name){
return true;
}
function sess_close(){
return true;
}
function sess_read($id){
$id = mysql_escape_string($id);
$q = mysql_query('SELECT `data` FROM `sms_sessions` WHERE `sid`="' . $id . '"');
if(false === $data = mysql_fetch_assoc($q))return '';
return $data['data'];
}
function sess_write($id,$data){
$id = mysql_escape_string($id);
$data = mysql_escape_string($data);
mysql_query('REPLACE INTO `sms_sessions`(`sid`,`data`) VALUES("' . $id . '","' . $data . '")');
return true;
}
function sess_destroy($id){
$id = mysql_escape_string($id);
mysql_query('DELETE FROM `sms_sessions` WHERE `sid`="' . $id . '"');
return true;
}
function sess_gc($maxlifetime){
mysql_query('DELETE FROM `sms_sessions` WHERE UNIX_TIMESTAMP()-UNIX_TIMESTAMP(`upd_time`)>' . intval($maxlifetime));
return true;
}
session_set_save_handler('sess_open', 'sess_close', 'sess_read', 'sess_write', 'sess_destroy', 'sess_gc');
session_id(random_str(7));
session_start();
if(!isset($_SESSION['reg'])){
session_destroy();
session_id(random_str(7));
session_start();
$_SESSION['reg'] = true;
}
?>
|
| |
|
|
|
|
|
|
|
для: sms-send
(05.09.2007 в 18:39)
| | ВАУ!!! ..... это инновациионное решение в мире колесного транспорта...ВЕЛОСИПЕД)))) | |
|
|
|
|
|
|
|
для: deman-b
(05.09.2007 в 19:18)
| | хм код не плохой, чувствуется, что не новичок писал...только не могу понять зачем... попытка защиты какая-то может быть?
session_set_save_handler('sess_open', 'sess_close', 'sess_read', 'sess_write', 'sess_destroy', 'sess_gc');
session_id(random_str(7));
session_start();
if(!isset($_SESSION['reg'])){
session_destroy();
session_id(random_str(7));
session_start();
$_SESSION['reg'] = true;
}
|
хм...сесион старт может два раза отказывается пахать?)
не у мну бошка кругом от кода идёт.... | |
|
|
|
|
|
|
|
для: tricket
(05.09.2007 в 21:04)
| | Насколько я помню, многократные вызовы ничего не дают | |
|
|
|
|
|
|
|
для: bronenos
(05.09.2007 в 21:56)
| | >Насколько я помню, многократные вызовы ничего не дают
<?php
session_set_save_handler('sess_open', 'sess_close', 'sess_read', 'sess_write', 'sess_destroy', 'sess_gc');
session_id(random_str(7)); // в оригинале здесь передаётся значение SID, принятое от пользователя
session_start(); // запускаем сессию
if(!isset($_SESSION['reg'])){ // если SID передан "от балды" пользователем, а не сгенерирован скриптом
session_destroy(); // уничтожаем сессию
session_id(random_str(7)); // генерим новый SID
session_start(); // запускаем сессию, а она не запускается
$_SESSION['reg'] = true; // ставим метку, что это "правильная" сессия
}
?>
|
| |
|
|
|
|
|
|
|
для: tricket
(05.09.2007 в 21:04)
| | >только не могу понять зачем... попытка защиты какая-то может быть?
Ну в общем то да, у хостера (не буду его упоминать) директория tmp, в которой хранятся "файловые" сессии, доступна на чтение всем пользователям и спереть все сессии можно обычным print_r(glob(/tmp/*));
>хм...сесион старт может два раза отказывается пахать?)
При стандартном обработчике сессий всё нормально. | |
|
|
|
|
|
|
|
для: sms-send
(05.09.2007 в 22:19)
| | товарищь гугл мне прошептал, что при возникновение ошибки как у тебя нужно:
1)php.ini отредактировать:
Это
[Session]
; Handler used to store/retrieve data.
session.save_handler = user
изменить на
[Session]
; Handler used to store/retrieve data.
session.save_handler = files
2)если нет доступа к php.ini то создай .htaccess с содержимым
RewriteEngine On
php_value session.save_handler files
3)или в начале скрпта напиши строчку
session_module_name("files");
только гугл прошептал это строго по секрету)
Особо с апачем не ковырялся, попробуй порыть в сторону .htaccess для измения директории хранения своих файлов сессий.
Чесно говоря я бы на твоём хостинге дефейснул остальные сайты, и свалил на другой хостинг :) | |
|
|
|
|
|
|
|
для: tricket
(06.09.2007 в 13:52)
| |
2)если нет доступа к php.ini то создай .htaccess с содержимым
RewriteEngine On
php_value session.save_handler files
|
так это ж настройка mod rewrite вроде | |
|
|
|
|
|
|
|
для: bronenos
(06.09.2007 в 15:30)
| | хм наверное строку RewriteEngine On случайно скопировал... сорри! | |
|
|
|