Язык
Контакты
GitHub
Поддержка
Регистрация
Войти
Логин: Пароль: Запомнить:
Пользователи
Последние сообщения
Ответить
1 2 3 4

Работа с сессиями

skad0

  • Атом-мозг
  • Юзер
  • 841
  • Репутация:10 
  • Предупреждения: 0 
  • Регистрация:
    2 Окт 2010
#11
Code:
Array
(
    [user] => 1
)

 1 
 2 
<?php Warningsession_start() [function.session-start]: Cannot send session cache limiter headers already sent (output started at Z:\home\91.210.178.27\www\krich\SMARTY\sk-admin\php\sess_test.php:1in Z:\home\91.210.178.27\www\krich\SMARTY\sk-admin\php\sess_test.php on line 7?>

При таком варианте:
 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
 9 
 10 
 11 
 12 
 13 
 14 
 15 
<?php function pr($data) {
   echo 
'<pre>'
   
print_r($data); 
   echo 
'</pre>';
}
session_start();
if (
$_SESSION['user']=1)  // проверяем сессию (вот думаю, стоит ли приписывать isset?)
    

    
pr($_SESSION);
     } 
// просто показываем содержимое страницы, так как юзер получил правильный ключ
else
 { 
 echo 
"Пройдите авторизацию: <a href=\"index.php\"> Авторизация </a>"// Отправляем на авторизацию
  
exit();
}
?>

Drunya

  • Man of God
  • Админ
  • 3527
  • Репутация:110 
  • Предупреждения: 0 
  • Регистрация:
    30 Ноя -0001
#12
))) сделай не
 1 
 2 
<?php if ($_SESSION['user']=1)?>
а
 1 
 2 
<?php if ($_SESSION['user'] == 1)?>

в первом случае ты не проверяещь значение а присваиваешь его

Я горжусь тем, что создал бесплатную CMS - AtomX. И люблю нашу команду)

skad0

  • Атом-мозг
  • Юзер
  • 841
  • Репутация:10 
  • Предупреждения: 0 
  • Регистрация:
    2 Окт 2010
#13
Code:
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at Z:\home\91.210.178.27\www\krich\SMARTY\sk-admin\php\sess_test.php:1) in Z:\home\91.210.178.27\www\krich\SMARTY\sk-admin\php\sess_test.php on line 7

Все равно, если вбиваешь адрес, страница открывается

Drunya

  • Man of God
  • Админ
  • 3527
  • Репутация:110 
  • Предупреждения: 0 
  • Регистрация:
    30 Ноя -0001
#14
так ты почисть сессию. у тебя там могло остаться значение 1. почисти ее и потом уже присваивай только при удачной авторизации. а если ее не произошло то чисть эту переменную. если все равно будет отдавать запрещенные данные сново продампь.

 1 
 2 
 3 
<?php if ($_SESSION['user'] == 1){

}
?>

такая проверка пропустить только если $_SESSION['user'] будет равно 1 и никак иначе оно не пропустит
можно сделать еще так
 1 
 2 
 3 
<?php if ($_SESSION['user'] === 1){

}
?>
но тогда и присваивать значение надо только так
 1 
 2 
<?php $_SESSION['user'] = 1;?>
три равно означает что сверка будет идти еще и по типу.
например
'1' == 1 TRUE(ДА)
'1' === 1 FALSE(нет)

Отредактировано автором 11 Окт 2010
Я горжусь тем, что создал бесплатную CMS - AtomX. И люблю нашу команду)

skad0

  • Атом-мозг
  • Юзер
  • 841
  • Репутация:10 
  • Предупреждения: 0 
  • Регистрация:
    2 Окт 2010
#15
 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
 9 
 10 
 11 
 12 
 13 
 14 
 15 
 16 
<?php function pr($data) {
   echo 
'<pre>'
   
print_r($data); 
   echo 
'</pre>';
}
session_start();

if (
$_SESSION['user'] == 1)  // проверяем сессию (вот думаю, стоит ли приписывать isset?)
    

    
pr($_SESSION);
     } 
// просто показываем содержимое страницы, так как юзер получил правильный ключ
else
 { 
 echo 
"Пройдите авторизацию: <a href=\"index.php\"> Авторизация </a>"// Отправляем на авторизацию
  
exit();
}
?>

Выводит:
Code:
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at Z:\home\91.210.178.27\www\krich\SMARTY\sk-admin\php\sess_test.php:1) in Z:\home\91.210.178.27\www\krich\SMARTY\sk-admin\php\sess_test.php on line 7

И отправляет на авторизацию

Значит тут:
 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 
 29 
 30 
 31 
 32 
 33 
<?php <?php
 
function pr($data) {
   echo 
'<pre>'
   
print_r($data); 
   echo 
'</pre>';

error_reporting(E_ALL);
include (
'mysql_conf.php');
 if( 
preg_match('#^[a-z, A-Z, 0-9, _, -]+$#'$_POST['login'])) { 
 if( 
preg_match('#^[a-z, A-Z, 0-9, _, -]+$#'$_POST['password'])) {
    
   
//var_dump($users_tb);
   
$q mysql_query("SELECT * FROM `"$users_tb ."` WHERE  `password`='".$_POST['password'] ."' AND  `login`='".$_POST['login'] ."' LIMIT 1 ");
    if (
mysql_num_rows($q) > 0) {
      
$result mysql_fetch_array($q);
      
$_SESSION['user'] = 1;
      
header("Location: ../main.php");
      die();
   } 
    else  {
     
//unset($_SESSION['user']);
     
echo "Такие пара логина и пароля найдены не были <br/> <a href=\"../index.php\"> На авторизацию </a>"
     
// отправляем обратно на авторизацию
     
die();
   }
 }
  else {
  die(
"Вы ввели недопустимые символы. <br/> <a href=\"../index.php\"> На авторизацию </a>");   
 }
 }
 else {
  die(
"Вы ввели недопустимые символы. <br/> <a href=\"../index.php\"> На авторизацию </a>");   
 }
?>

не присваивает?

Добавлено 2010.10.11 14-53

Если в последнем прописать session_start();
То показывает страницу. Но опять же с ошибкой

Drunya

  • Man of God
  • Админ
  • 3527
  • Репутация:110 
  • Предупреждения: 0 
  • Регистрация:
    30 Ноя -0001
#16
надо избавитсья от ошибки. там написано что в первой строке выводятся данные и из-за этого в седьмой строке не может стартануть сессия. нет сесии - нет твоей переменной и соответственно нет авторизации.

поести функцию после старта сессии. сесиия должна стартовать раньше всего. в самом начале.

Добавлено 2010.10.11 15-18

Сесия по времени это когда ты пишешь в сессию не единицу а например

 1 
 2 
<?php $_SESSION['user'] = time();?>

а потом проверяешь

 1 
 2 
 3 
<?php if (!empty($_SESSION['user']) && $_SESSION['user'] > (time() - 300)) {

}
?>

функция тайм просто записывает количество секунд с 1970 года)))

Отредактировано автором 11 Окт 2010
Я горжусь тем, что создал бесплатную CMS - AtomX. И люблю нашу команду)

skad0

  • Атом-мозг
  • Юзер
  • 841
  • Репутация:10 
  • Предупреждения: 0 
  • Регистрация:
    2 Окт 2010
#17
Дрюнь. А как запилить авторизацию на сайте разными пользователями? типо пилить $_SESSION[''. $_POST['login'] .'']? я вот просто логически не прошарю никак

Drunya

  • Man of God
  • Админ
  • 3527
  • Репутация:110 
  • Предупреждения: 0 
  • Регистрация:
    30 Ноя -0001
#18
ну так любая авторизация работает на разных пользователей. в сесию пишешь ид юзера который залогинился и дальше ко всем действиям привязываешь этот ид таким образом понимаю кто это совершгил и имеет ли он на это право)

Я горжусь тем, что создал бесплатную CMS - AtomX. И люблю нашу команду)

skad0

  • Атом-мозг
  • Юзер
  • 841
  • Репутация:10 
  • Предупреждения: 0 
  • Регистрация:
    2 Окт 2010
#19
Цитата
ну так любая авторизация работает на разных пользователей. в сесию пишешь ид юзера который залогинился и дальше ко всем действиям привязываешь этот ид таким образом понимаю кто это совершгил и имеет ли он на это право)
спс, прошарил

Добавлено 2010.11.23 22-55

хмм. Нет не прошарил таки. А как тогда проверять id юзера, который уже "прошел авторизацию"?

Отредактировано автором 23 Ноя 2010

Drunya

  • Man of God
  • Админ
  • 3527
  • Репутация:110 
  • Предупреждения: 0 
  • Регистрация:
    30 Ноя -0001
#20
ну так ты же в сессию его данные засунешь, там и ИД будет. Например
 1 
 2 
 3 
 4 
<?php $_SESSION['user']['id']
$_SESSION['user']['name']
$_SESSION['user']['pass']
//и тд?>

Я горжусь тем, что создал бесплатную CMS - AtomX. И люблю нашу команду)
1 2 3 4
Сейчас online: 10. Зарегистрированных: 0. Гостей: 10.