Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / PHP: Сессия / 25 сообщений из 48, страница 1 из 2
23.07.2013, 17:17
    #38340978
Mike222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHP: Сессия
Подскажите, я так и не понял как организовать сессию, что не так тут.
В mainpage.php не могу проверить значение $_SESSION['user_role']

В index.php
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
<?php
	if (!isset($_SESSION))
	{
		//session_save_path($_SERVER['DOCUMENT_ROOT'].'/session');
		session_save_path(dirname(__FILE__)."/session");
		ini_set('display_errors',1);
		error_reporting(E_ALL);
		ini_set("session.use_cookies", 0);
		ini_set("session.use_trans_sid", 1);
		//ini_set("register_globals", "On");
		//ini_set("session.cache_limiter", "private");
		//session_name("session123");
		//var_dump(session_start());
		session_start();
		//session_register('user_login');
		$_SESSION['user_login'] = "USR";
	}    

	header("Location: /mainpage.php");
?>


**********************************************
В mainpage.php
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
<?php
    session_start();
	.................
	.................
	if ($_SESSION['user_role'] == "USR")
	{
		.................
		.................
	}
	else
	{
		.................
		.................
	}
?>
...
Рейтинг: 0 / 0
23.07.2013, 17:30
    #38341016
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHP: Сессия
$_SESSION всегда существует
...
Рейтинг: 0 / 0
23.07.2013, 18:25
    #38341121
Mike222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHP: Сессия
Hett$_SESSION всегда существует

Это вопрос или утверждение?
...
Рейтинг: 0 / 0
23.07.2013, 18:39
    #38341147
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHP: Сессия
Вообще это было утверждение, но оно не верное. Если не делать старт сессии то супер массива нет.

А вообще, найдите 5 отличий
Код: php
1.
$_SESSION['user_login'] = "USR";



Код: php
1.
if ($_SESSION['user_role'] == "USR")
...
Рейтинг: 0 / 0
23.07.2013, 18:55
    #38341170
Mike222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHP: Сессия
Правильно $_SESSION['user_role'], здесь чуть ошибся.
Но у меня все правильно.

session_start(); в обоих файлах не старт сессии, или как-то по другому надо?
...
Рейтинг: 0 / 0
23.07.2013, 18:59
    #38341173
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHP: Сессия
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
<?php
	if (!isset($_SESSION))
	{
		//session_save_path($_SERVER['DOCUMENT_ROOT'].'/session');
		session_save_path(dirname(__FILE__)."/session"); //путь верно указан? Каталог доступен для записи?
		ini_set('display_errors',1);
		error_reporting(E_ALL);
		ini_set("session.use_cookies", 0);
		ini_set("session.use_trans_sid", 1);
		//ini_set("register_globals", "On");
		//ini_set("session.cache_limiter", "private");
		//session_name("session123");
		//var_dump(session_start());
		var_dump(session_start(););
		//session_register('user_login');
		$_SESSION['user_login'] = "USR";
	}    

	header("Location: /mainpage.php");
?>
...
Рейтинг: 0 / 0
23.07.2013, 19:00
    #38341176
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHP: Сессия
var_dump(session_start()); - двоеточие там лишнее, я опечатался.
...
Рейтинг: 0 / 0
23.07.2013, 19:10
    #38341194
Mike222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHP: Сессия
Да, путь доступен.
Но иногда создается сразу несколько файлов сессии типа этого sess_rjafmoj3vpv9tpv808trmih7h7, с разными идами, а иногда один файл.
Я так понимаю, что должен быть один файл. Правильно?
...
Рейтинг: 0 / 0
23.07.2013, 19:35
    #38341220
Electric200
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHP: Сессия
Код: html
1.
2.
3.
4.
5.
6.
7.
8.
Для того, чтобы иметь доступ к переменным сессии на любых страницах сайта, надо написать ТОЛЬКО ОДНУ(!) строчку в самом начале КАЖДОГО файла, в котором нам нужны сессии:
session_start();
И далее обращаться к элементам массива $_SESSION. Например, проверка авторизации будет выглядеть примерно так:
session_start();
if ($_SESSION['authorized']<>1) {
header("Location: /auth.php");
exit;
}



Тыц
...
Рейтинг: 0 / 0
23.07.2013, 21:35
    #38341352
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHP: Сессия
Как я понял в одном случае вы изменяете путь к сессиям, а в другом он ищет их по дефолтному адресу и естественно не находит...
...
Рейтинг: 0 / 0
24.07.2013, 09:08
    #38341577
Mike222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHP: Сессия
Hett Как я понял в одном случае вы изменяете путь к сессиям, а в другом он ищет их по дефолтному адресу и естественно не находит...

Что-то подобно и происходит.
Перед каждым session_start(); надо указывать путь к сессиям session_save_path(dirname(__FILE__)."/session");?
Например, вот так будет правильно?

session_save_path(dirname(__FILE__)."/session");
session_start();
...
Рейтинг: 0 / 0
24.07.2013, 10:06
    #38341626
phpz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHP: Сессия
Mike222Hett Как я понял в одном случае вы изменяете путь к сессиям, а в другом он ищет их по дефолтному адресу и естественно не находит...

Что-то подобно и происходит.
Перед каждым session_start(); надо указывать путь к сессиям session_save_path(dirname(__FILE__)."/session");?
Например, вот так будет правильно?

session_save_path(dirname(__FILE__)."/session");
session_start();А чем дофолтный путь сессий обидел?
...
Рейтинг: 0 / 0
24.07.2013, 10:07
    #38341627
deblogger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHP: Сессия
Mike222,

А зачем указывать этот путь?
...
Рейтинг: 0 / 0
24.07.2013, 10:31
    #38341662
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHP: Сессия
Сами себе проблемы ищут)
...
Рейтинг: 0 / 0
24.07.2013, 11:40
    #38341796
deblogger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHP: Сессия
Hett,

Тут очевидно дело обычное. Автор где-то нарыл кусок кода и приспособил к себе. Теперь как скульптор будет отсекать лишнее пока одна строка не останется. :)
...
Рейтинг: 0 / 0
25.07.2013, 18:35
    #38344194
Mike222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHP: Сессия
Обнаружил, что сессия не работает, т.е. не присваивает переменным значения только в Mozilla, а в остальных (Safari, Opera, Chrome, IE) все нормально.
Подскажите в чем может быть дело и как исправить?
...
Рейтинг: 0 / 0
26.07.2013, 06:46
    #38344570
deblogger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHP: Сессия
Mike222,

В смысле строка

session_save_path(dirname(__FILE__)."/session")

меняет путь к кукям у клиента?

Я может чего-то не понимаю, но схема примерно такова: на сервере лежит дамп переменной в файле к которому вы можете обращаться в течении определенного времени из разных скриптов. При обращении дамп обращается в переменные, возвращается в память, короче. У клиента лежит печенька (cockie) в которой, допустим, записан идентификатор сессии, по которому вы можете получить связанные с юзером переменные в записи сессии и значения.

Если у клиента отключены куки или стоит еще какое плугоПО которое запрещает их юзать по некоторым признакам - вы не сможете идентифицировать клиента и следовательно не получите ничего полезного из записей сессии.

Ну, или типа того. В мануале про сессии все расписано.
...
Рейтинг: 0 / 0
26.07.2013, 07:12
    #38344575
deblogger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHP: Сессия
Для скрипта - сервер это локаль. Оффлайн. В оффлайне такие методы применяются с восхода компов. Файл это дамп куска памяти а первые файлы были в виде продырявленных картонных карточек. Любительские приложения юзают обмен данными через файлы напропалую. $_SESSION такой же файл как и любые другие и все что вам нужно это отождествить юзера по какому-то признаку. Если бы каждый комп имел IP адрес независимо от места включения в сеть, то есть если бы каждый комп был сервером - этим признаком был бы ойпи. Пока что приходится писать клиенту в куки некий ключ по которому он впоследствии и отождествляется.
...
Рейтинг: 0 / 0
26.07.2013, 10:39
    #38344756
alex564657498765453
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHP: Сессия
deblogger,

если бы каждый комп имел айпи независящий от места подключения...так это мак адрес.

только маршрутизация сложная. это если петя взял ноут и перешол из одного макдональдса в другой, это нужно чтобы тутже вся планета, узнала, что петя теперь в другом месте.

айпи для того и существует, что в отличии от макадреса - он как бы идентифицирует точку подключения.

АНАЛОГ
легко работать почте если писать кому ты пишешь письмо, а не где человек находиться?

тоесть вместо москва, ул. ленина 25 кв 145 - писать - гошику сидоровичу попугайло, 1977г р.(серия паспорта и кем выдан)

:):):)

да на конвертах ты пишешь имя человека, чтобы в одной квартире люди уже знали кому именно.

дык и мак адреса - универсальные, аналогично юзаються на последнем узле перед твоей машиной. (свич роутер или что там за барахло стоит)
...
Рейтинг: 0 / 0
26.07.2013, 10:49
    #38344783
alex564657498765453
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHP: Сессия
deblogger,

ну а если копнуть ещо глубже, то сесия - это не идентифицирующий признак пользователя/машины/приложения .... ----это идентификатор акта передачи.

вплоть до того, что один поток(не процесс а имено поток) может открыть сразу несколько сесий.
это очень удачно выбран логический уровень разделения разных сеансов, который не зависит ни от чего, кроме как от самого идентификатора сесии...такой себе примари кей

тоесть впринципе, ты можешь одновремено 1000 подключений вести к одному сайту и будет 1000 разных сесий раз тебе такое надо (ну скажем спамить форумы, или проводить анализ(тестирование) работы сайта)



ЗЫ мы же все понимаем чем примари кей независящий ни от чего(автоинкремент, юник_айди....) лучше , чем скажем серия паспорта(что впринципе тоже уникальна) или другие данные которые по своей природе уникальны.

-основные выгоды, что можно абстрагировать работу связей от данных(скажем везде примари это число интежер -а не по ситуации, где варчар, где интежер, где бинари , где ещо какая охинея)

-в будущем, при расширении функционала, или изменении архитектуры, то что было уникальным, может потерять это свойство.
ПРИМЕР - серияномер паспорта в таблице паспорта - вышел закон, серияномер национального и международного паспорта должны совпадать :) и крантец примари кею ввиде серииномера
...
Рейтинг: 0 / 0
26.07.2013, 10:49
    #38344785
?
?
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHP: Сессия
Mike222
Код: php
1.
		ini_set("session.use_cookies", 0);


Зачем-то запретили использовать куки
...
Рейтинг: 0 / 0
26.07.2013, 12:27
    #38344991
Mike222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHP: Сессия
Почистил куки и стал присваивает переменным значения.
Но теперь другая проблема - отваливается сессия.
Что посоветуете проверить?
...
Рейтинг: 0 / 0
26.07.2013, 15:49
    #38345464
Electric200
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHP: Сессия
Mike222,

Выложите куда то ваши исходные файлы кода и дайте ссылку.
...
Рейтинг: 0 / 0
26.07.2013, 17:32
    #38345733
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHP: Сессия
Как понять "отваливается"?
...
Рейтинг: 0 / 0
27.07.2013, 09:54
    #38346216
Mike222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHP: Сессия
Создается файл сессии sess_ho1n8vg3fos43gli54c2lnno16 с таким содержанием:
session_id|s:26:"ho1n8vg3fos43gli54c2lnno16";session_name|s:9:"mike222";
user_login|s:5:"admin";user_role|s:3:"adm";ip|s:9:"127.0.0.1";

Но при переходе обратно по header("Location: /index.php") (может не так надо сделать возврат)
что-то происходит не так или в index.php у меня что-то не то написано, т.е. на странице
index.php значение var_dump($_SESSION) пусто, хотя на диске имеется файл сессии с переменными
и правильными их значениями.

Фаил index.php
Код: php
1.
2.
3.
4.
5.
6.
7.
<?php
	error_reporting(E_ALL);
	if (isset($_REQUEST[session_name()]))
	{
		session_start();
	}
?>


Фаил admin.php
Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
<form id="autorize_frm" enctype="multipart/form-data" action="autorize.php" method="post">
	<h1>Авторизация</h1>
	<label class="label">Логин:</label>
	<input class="input_field" type="text" maxlength="20" name="user_name" placeholder="Ваш логин" value="" />
	<label class="label">Пароль:</label>
	<input class="input_field" type="password" maxlength="20" name="password" placeholder="Ваш пароль" value="" />
	<input id="enter" type="submit" name="login" value="Войти" />
    <input id="register" type="submit" name="register" value="Регистрация" />
</form>


Фаил autorize.php
Код: php
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.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
<?php
    if (!isset($_SESSION))
    {
        ini_set("display_errors", 1);
        error_reporting(E_ALL);
        ini_set("session.use_cookies", 0);
        //ini_set("session.use_only_cookies", 1);
        ini_set("session.use_trans_sid", 1);
        ini_set("session.save_handler", "files");
        //ini_set("session.save_handler", "user");
        //ini_set("register_globals", "On");

        ini_set("session.name", "mike222");

        ini_set("session.cache_limiter", "private");
        //ini_set("session.cache_limiter", "public");

        ini_set('session.cookie_lifetime', '2000');
        ini_set("session.gc_maxlifetime", "1800");
        ini_set("session.gc_probability", 10);

        ini_set("session.cookie_path", $_SERVER['DOCUMENT_ROOT'] . "/session");
        ini_set("session.save_path", $_SERVER['DOCUMENT_ROOT'] . "/session");

        session_start();
    }

    if (isset($_POST['login']))
    {
        $user_login = strip_tags(htmlspecialchars($user_name));
        $userpass = strip_tags(htmlspecialchars($password));
        $userpass = md5($userpass); 
		.............................
		.............................
		.............................

		include_once("../admin/classes/class_database.php");
		$objdatabase = new database();
		$objdatabase->sqluserlogin($user_login);
		
        if ($userpass != $user_pass)
        {
			.............................
			.............................
			.............................
			exit();
        }
        else
        {
			$_SESSION['session_id'] = session_id();
            $_SESSION['session_name'] = session_name();
            $_SESSION['user_login'] = $user_login;
            $_SESSION['user_role'] = $user_role;
            $_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
        }
    }

	header("Location: /index.php");
    exit();
?>
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / PHP: Сессия / 25 сообщений из 48, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]