Forum Webscript.Ru
Программирование => PHP => Тема начата: от 13 Ноября 2001, 00:34:52
-
Как организовать?
Мне надо следующее:
1. Пользователь авторизуется (логин, пароль).
2. В его строке есть ячейка session, в неё и пишется сессия.
3. Пользователь играется, соответсвенно сессия обновляется
4. Он уходит, а сессия остается, а при возвращении на сайт (авторизации), ему должна загрузится его уже существующаяя сессия...
Как это осуществить?
У меня в основном сложность с записью сессии в MySQL. Как правильно записывать и потом считывать и привязать к конкретному юзверю?
-
Кукисы однозначно...
-
Unregistered
$session_key="id";
$session_value = "data";
$session_time = "expire";
$db = "";
$expire = 300;
function sess_open($save_path, $session_name){
global $dbhost, $dbuser, $dbpasswd, $db;
if (! $db = mysql_pconnect($dbhost, $dbuser, $dbpasswd)){
echo mysql_error();
exit;
}
return true;
}
function sess_close(){
return true;
}
function sess_read($key){
global $db, $dbname, $t_sessions, $session_key, $session_value, $session_time;
$query = "select $session_value from $t_sessions where $session_key = \'$key\' and $session_time > UNIX_TIMESTAMP()";
$result = mysql_db_query($dbname, $query, $db);
if($record = mysql_fetch_row($result)){
return $record[0];
} else {
return false;
}
}
function sess_write($key, $val){
global $db, $dbname, $t_sessions, $expire;
$value = addslashes($val);
$query = "replace into $t_sessions values (\'$key\', \'$value\', UNIX_TIMESTAMP() + $expire)";
$result = mysql_db_query($dbname, $query, $db);
echo mysql_error();
return $result;
}
function sess_destroy($key){
global $db, $dbname, $t_sessions, $session_key;
$query = "delete from $t_sessions where session_key = \'$key\'";
$result = mysql_db_query($dbname, $query, $db);
return $result;
}
function sess_gc($maxlifetime){
global $db, $dbname, $t_sessions, $session_time;
$query = "delete from $t_sessions where session_time < UNIX_TIMESTAMP()";
$result = mysql_db_query($dbname, $query, $db);
return mysql_affected_rows($db);
}
session_set_save_handler("sess_open","sess_close","sess_read","sess_write","sess_destroy","sess_gc");
-
Britva А разве сериализацию/десериализацию в этих функциях делать не нужно?
-
поясни
-
Если в сессии пишуться только тект данные, то нет. Иначе (при хранении объектов, массивов) сериализация нужна.
-
Не понял
поясни
Ну например у тебя есть массив:
$a = array (1, 2, array ("a", "b", "c"));
Сериализация "превращает" переменные и их значения в строку а десериализация наоборот превращает строку в переменные. (Это упрощенное объяснение). То есть нужно тебе массив в БД записать. Ты его сериализуешь в строку и смело записываешь в поле TEXT. Хочешь получить массив из БД - вытаскиваешь строку, десериализируешь ее и получаешь массив.
С объектами тоже так поступать можно.
См. функции
serialize()
deserialize()
-
я не понял зачем сериализация нужна здесь. она же в сессиях автоматически происходит.
если не используешь БД (эти функции) открой в /php/sessiondata (по умолчанию) там будут файлы sess_45893456sdfgsdfgh там как раз инфа и записывается автоматически с помощью сессий в php4.
вот пример:
user|a:2:{s:4:"name";s:7:"my_name";s:8:"password";s:11:"my_password";}
это вот и есть обычный массив $user
$user["name"] = "my_name";
$user["password"] = "my_password";