Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Проблема с сессиями
Форумы портала PHP.SU » Разное » Корзина » Проблема с сессиями

Страниц (1): [1]
 

1. D1mOn - 04 Марта, 2008 - 08:55:36 - перейти к сообщению
Открываю сессию, сижу, кто-нибудь заходит и (!) почему-то начинает сидеть под моей сессией с моим именем и т.д

В чем прикол?

Это установка сессии
PHP:
скопировать код в буфер обмена
  1. $_SESSION['name'] = 'adminka';
  2.        $SESSION['login'] = '';
  3.        $status = $res['status'];
  4.  
  5.        session_regenerate_id();
  6.        $sid = session_id();
  7.        mysql_query("INSERT INTO sessions (username,sid,status,date) values ('$nick','$sid','$status','$now')");
  8.        header ("Location: admin.php");
  9.        exit;


Это проверка на другой странице
PHP:
скопировать код в буфер обмена
  1.  
  2.  $sid = session_id();
  3.  
  4.  if(!isset($_SESSION['s_name']) OR $_SESSION['s_name'] != 'adminka')
  5.  {
  6.    header ("Location: index.php");
  7.    exit;
  8.  }
  9.  
  10.  if($_SESSION['s_name'] == 'adminka')
  11.  {
  12.    $db = mysql_connect('localhost','root','');
  13.    $res = mysql_select_db('db',$db);
  14.  
  15.    mysql_query ("set character_set_client='cp1251'");
  16.    mysql_query ("set character_set_results='cp1251'");
  17.    mysql_query ("set collation_connection='cp1251_general_ci'");
  18.  
  19.    $result = mysql_query("SELECT * FROM sessions WHERE sid = '$sid'", $db);
  20.    $res = mysql_fetch_array($result);
  21.  
  22.    if(mysql_num_rows($result) != 1)
  23.    {
  24.      header ("Location: index.php");
  25.      exit;
  26.    }
  27.    else
  28.    {
  29.      $ses_user = $res['username'];
  30.      $ses_status = $res['status'];
  31.      $enter_time = $res['date'];
  32.      $_SESSION['status'] = $res['status'];
  33.    }
  34.  }
  35.  else
  36.  {
  37.    header ("Location: index.php");
  38.    exit;
  39.  }


Млин. Помогите.
2. valenok - 04 Марта, 2008 - 09:57:23 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. $_SESSION['name'] = 'adminka';
  2.        $SESSION['login'] = '';
  3.        $status = $res['status'];
  4.  
  5.        session_regenerate_id();
  6.        $sid = session_id();
  7.        mysql_query("INSERT INTO sessions (username,sid,status,date) values ('$nick','$sid','$status','$now')");
  8.        header ("Location: admin.php");
  9.        exit;
  10.  


Каждую строчку - объяснить что делает и зачем она нужна.
3. D1mOn - 04 Марта, 2008 - 10:10:46 - перейти к сообщению
Ничего
(Добавление)
Млин, почему-то сессии смешиваются!

Пытаюсь так:
PHP:
скопировать код в буфер обмена
  1.        session_regenerate_id();
  2.        $sid = session_id();
  3.  
  4.        $_SESSION['name'] = 'adminka'; // имя сессии
  5.        $_SESSION['login'] = $nick; // пользователь
  6.        $_SESSION['status'] = $res['status']; // его статус (админ, модер и т.д.)
  7.        $_SESSION['uid'] = $res['id']; // его id, я думая для идентефикации между пользователями
  8.        $uid = $res['id'];
  9.        $status = $res['status'];
  10.  
  11.        mysql_query("INSERT INTO sessions (uid,username,sid,status,date) values ('$uid','$nick','$sid','$status','$now')");
  12.        header ("Location: admin.php");
  13.        exit;


А это скрипт принимающий данные:
PHP:
скопировать код в буфер обмена
  1.   $sid = session_id();
  2.  
  3.   if($_SESSION['name'] != 'adminka')
  4.   {
  5.     print "У вас нет прав доступа!";
  6.     exit;
  7.   }
  8.  
  9.    $user = $_SESSION['login'];
  10.    $status = $_SESSION['status'];
  11.    $uid = $_SESSION['uid'];
  12.  
  13.    $db = mysql_connect('localhost','root','');
  14.    $res = mysql_select_db('db',$db);
  15.  
  16.    mysql_query ("set character_set_client='cp1251'");
  17.    mysql_query ("set character_set_results='cp1251'");
  18.    mysql_query ("set collation_connection='cp1251_general_ci'");
  19.  
  20.    $result = mysql_query("SELECT * FROM sessions WHERE uid = '$uid'", $db);
  21.    $res = mysql_fetch_array($result);
  22.    $enter_time = $res['date'];
  23.    if(mysql_num_rows($result) != 1)
  24.    {
  25.      //header ("Location: index.php");
  26.      print "$uid : Нет такой сессии";
  27.      exit;
  28.    }


Херня какая-тА (прошу прощения за выражения)!
4. valenok - 04 Марта, 2008 - 13:52:31 - перейти к сообщению
http://phpfaq[dot]ru/sessions
http://phpfaq[dot]ru/debug

http://php.net/
http://www[dot]internet-technologies[dot][dot][dot]oks/book_46[dot]html
5. D1mOn - 04 Марта, 2008 - 14:41:24 - перейти к сообщению
Да епрст!!!! Все равно захожу под админом, кто-то заходит под модератором, после меня и уменя меняется ВСЁ на него, ник, сессия и т.д.
(Добавление)
Упростил как мне подсказали.

Создаю переменные сессии логин и хэш пароля, на странице админа проверяю их в таблице, вывожу статус пользователя (админ или модератор) из записи этого пользователя., и даю данные либо для админа, либо для модера. Вроде все должно работать! А фигу!!! Даже PHPSESSID проверял разные!
6. Dastar - 04 Марта, 2008 - 16:40:40 - перейти к сообщению
Начните с сокращения кода. При авторизации выкинте все ненужное, и просто напишите session_start();
Потом занесите в таблицу все session_id(), после чего их распечатайте.
7. EuGen - 04 Марта, 2008 - 17:29:01 - перейти к сообщению
Dastar пишет:
Потом занесите в таблицу все session_id(), после чего их распечатайте.

Это где такому учат ?....

 

Powered by ExBB FM 1.0 RC1