Автор Тема: Запись/Чтение сессий в MySQL?  (Прочитано 3274 раз)

0 Пользователей и 1 Гость просматривают эту тему.

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

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

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

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

У меня в основном сложность с записью сессии в MySQL. Как правильно записывать и потом считывать и привязать к конкретному юзверю?

Оффлайн Wowik

  • The Warlock
  • Пользователь
  • **
  • Сообщений: 88
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Запись/Чтение сессий в MySQL?
« Ответ #1 : 13 Ноября 2001, 06:57:03 »
Кукисы однозначно...
А ларчик просто открывался ...

Оффлайн Britva

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1660
  • +0/-0
  • 0
    • Просмотр профиля
    • http://eugeny.com
Запись/Чтение сессий в MySQL?
« Ответ #2 : 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");
« Последнее редактирование: 13 Ноября 2001, 09:10:56 от Britva »
Евгений aka Razor,

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
Запись/Чтение сессий в MySQL?
« Ответ #3 : 13 Ноября 2001, 14:51:45 »
Britva А разве сериализацию/десериализацию в этих функциях делать не нужно?
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн Britva

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1660
  • +0/-0
  • 0
    • Просмотр профиля
    • http://eugeny.com
Не понял
« Ответ #4 : 13 Ноября 2001, 15:19:03 »
поясни
Евгений aka Razor,

Оффлайн Stek

  • Обожатель PHP
  • Ветеран
  • *****
  • Сообщений: 532
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.phpdevs.com
Запись/Чтение сессий в MySQL?
« Ответ #5 : 13 Ноября 2001, 16:28:43 »
Если в сессии пишуться только тект данные, то нет. Иначе (при хранении объектов, массивов) сериализация нужна.
PHP без башни - сделай свою жизнь разнообразнее.
Разбираю скрипты, собираю заново, вытираю пыль с баз данных.

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
Запись/Чтение сессий в MySQL?
« Ответ #6 : 13 Ноября 2001, 18:23:16 »
Цитировать
Не понял
поясни
Ну например у тебя есть массив:

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

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

См. функции
serialize()
deserialize()
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн Britva

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1660
  • +0/-0
  • 0
    • Просмотр профиля
    • http://eugeny.com
Запись/Чтение сессий в MySQL?
« Ответ #7 : 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";
« Последнее редактирование: 14 Ноября 2001, 00:58:52 от Britva »
Евгений aka Razor,

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28