Forum Webscript.Ru

Программирование => PHP => Тема начата: от 13 Ноября 2001, 00:34:52

Название: Запись/Чтение сессий в MySQL?
Отправлено: от 13 Ноября 2001, 00:34:52
Как организовать?

Мне надо следующее:

1. Пользователь авторизуется (логин, пароль).
2. В его строке есть ячейка session, в неё и пишется сессия.
3. Пользователь играется, соответсвенно сессия обновляется
4. Он уходит, а сессия остается, а при возвращении на сайт (авторизации), ему должна загрузится его уже существующаяя сессия...

Как это осуществить?

У меня в основном сложность с записью сессии в MySQL. Как правильно записывать и потом считывать и привязать к конкретному юзверю?
Название: Запись/Чтение сессий в MySQL?
Отправлено: Wowik от 13 Ноября 2001, 06:57:03
Кукисы однозначно...
Название: Запись/Чтение сессий в MySQL?
Отправлено: Britva от 13 Ноября 2001, 08:55:25
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");
Название: Запись/Чтение сессий в MySQL?
Отправлено: Макс от 13 Ноября 2001, 14:51:45
Britva А разве сериализацию/десериализацию в этих функциях делать не нужно?
Название: Не понял
Отправлено: Britva от 13 Ноября 2001, 15:19:03
поясни
Название: Запись/Чтение сессий в MySQL?
Отправлено: Stek от 13 Ноября 2001, 16:28:43
Если в сессии пишуться только тект данные, то нет. Иначе (при хранении объектов, массивов) сериализация нужна.
Название: Запись/Чтение сессий в MySQL?
Отправлено: Макс от 13 Ноября 2001, 18:23:16
Цитировать
Не понял
поясни
Ну например у тебя есть массив:

$a = array (1, 2, array ("a", "b", "c"));

Сериализация "превращает" переменные и их значения в строку а десериализация наоборот превращает строку в переменные. (Это упрощенное объяснение). То есть нужно тебе массив в БД записать. Ты его сериализуешь в строку и смело записываешь в поле TEXT. Хочешь получить массив из БД - вытаскиваешь строку, десериализируешь ее и получаешь массив.
С объектами тоже так поступать можно.

См. функции
serialize()
deserialize()
Название: Запись/Чтение сессий в MySQL?
Отправлено: Britva от 13 Ноября 2001, 19:11:30
я не понял зачем сериализация нужна здесь. она же в сессиях автоматически  происходит.
если не используешь БД (эти функции) открой в /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";