#71 2012.02.11 09:56

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6594
Карма: 107
Профиль Веб-сайт

Re: авторизация $_COOKIE

$_COOKIE['PHPSESSID'] - лучше не использовать дефолтовое название, а ставить свое

Неактивен

#72 2012.02.11 12:59

tipsun
Moderator
Зарегистрирован: 2009.10.14
Сообщений: 2277
Карма: 19
Профиль

Re: авторизация $_COOKIE

Код:

1
span style="color: #0000BB"><?phpdefine('SESSION_NAME', 'SID');session_name(SESSION_NAME);if (isset($_COOKIE[SESSION_NAME])) { session_start(); if (! isset($_SESSION['SELF'])) { //Запрос к БД о наличии заданной session_id() //PHPSESSID=d65fjsmf8kc69ee8urb1glh855 //Можно было бы и SELECT COUNT(1) FROM `users` WHERE `PHPSESSID`='d65fjsmf8kc69ee8urb1glh855'; +- LIMIT 1; //Но надо, наверно, вытащить какую-нибудь важную инфу, поэтому скорее всего... //SELECT `uid` FROM `users` WHERE `PHPSESSID`='d65fjsmf8kc69ee8urb1glh855' LIMIT 1; if ($_/*Подсчет кол-ва затронутых строчек*/) { $_SESSION = array(); session_regenerate_id(); $_SESSION['SELF'] = true; //выплевываем данные с массива базы в массив сессии... } else { //отрубить сессию, может быть. $_SESSION = array(); session_destroy(); //$params = session_get_cookie_params(); setCookie(SESSION_NAME, null, $_SERVER['REQUEST_TIME'] - 1); //Доконца не понял че там этот session_destroy(); делает. //Как я понял: не очищает массив сессии, и не удаляет куку. } }}

Отредактировано tipsun (2012.02.11 13:17)

Неактивен

#73 2012.02.11 13:25

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6594
Карма: 107
Профиль Веб-сайт

Re: авторизация $_COOKIE

да и не SID тоже, лучше подгонять под конкретный проект. на вапинете скажем, сессия SID может ставится и в блогах и на форуме. в таком случае они будут перезаписывать друг друга.
лучше называть что-то типа wapinet_blog, wapinet_forum и т.д.

Неактивен

#74 2012.02.13 15:42

tipsun
Moderator
Зарегистрирован: 2009.10.14
Сообщений: 2277
Карма: 19
Профиль

Re: авторизация $_COOKIE

Чет не удаляется печенюха с "лисы".

Простая сессия, кука пропадает после закрытия браузера.
Чет она не удаляется. Видимо только при закрытии браузера only.
Или все-таки можно удалить?

Код:

1
span style="color: #0000BB"><?phpdefine('SESSION_NAME', 'SID');$_ = session_get_cookie_params();//setCookie(SESSION_NAME, null, $_SERVER['REQUEST_TIME'] - 1);setCookie(SESSION_NAME, null, $_SERVER['REQUEST_TIME'] - 1, $_['path'], $_['domain'], $_['secure'], $_['httponly']);//session_set_cookie_params(null, '/', '.' . $_SERVER['HTTP_HOST'], false, true);//session_name(SESSION_NAME);//session_start();echo $_COOKIE[SESSION_NAME];

Добавлено спустя   6 минут  39 секунд:
Все, я понял в чем дело. smile

Код:

1
2
3
echo '<pre>';
print_r(session_get_cookie_params());
echo '</pre>';

Отредактировано tipsun (2012.02.13 15:50)

Неактивен

#75 2012.02.13 18:21

tipsun
Moderator
Зарегистрирован: 2009.10.14
Сообщений: 2277
Карма: 19
Профиль

Re: авторизация $_COOKIE

И зачем session_get_cookie_params() вообще нужна, если она нифига не работает...
Можно как-то о куке которая у браузера узнать побольше?
- - - -
Точнее работает, когда указано явно session_set_cookie_params() или через ini_set() наверно.

Отредактировано tipsun (2012.02.13 18:26)

Неактивен

#76 2012.02.13 18:26

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6594
Карма: 107
Профиль Веб-сайт

Re: авторизация $_COOKIE

tipsun написал:

И зачем session_get_cookie_params() вообще нужна, если она нифига не работает...

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

Неактивен

#77 2012.02.14 00:34

tipsun
Moderator
Зарегистрирован: 2009.10.14
Сообщений: 2277
Карма: 19
Профиль

Re: авторизация $_COOKIE

Код:

1
span style="color: #0000BB"><?phpdefine('SLASH', DIRECTORY_SEPARATOR);define('SESSION_NAME', 'SID');define('SESSION_LIFETIME', 604800); //1 week/неделяdefine('SESSION_PATH', SLASH);define('SESSION_DOMAIN', '.' . $_SERVER['HTTP_HOST']);define('SESSION_SECURE', false);define('SESSION_HTTPONLY', true);session_name(SESSION_NAME);if (isset($_COOKIE[SESSION_NAME])) { session_start(); if (! isset($_SESSION['SELF'])) { //Запрос к БД о наличии заданной session_id() а проще $_COOKIE[SESSION_NAME] //SELECT `uid` FROM `users` WHERE `PHPSESSID`='d65fjsmf8kc69ee8urb1glh855' LIMIT 1; $_SESSION = array(); //на всякий случай... if ($query_rowCount) { session_set_cookie_params(SESSION_LIFETIME, SESSION_PATH, SESSION_DOMAIN, SESSION_SECURE, SESSION_HTTPONLY); session_regenerate_id(true); //копирует инфу в новый файл + удаляет старый файл. $_SESSION['SELF'] = true; //самоидентификация типа (есть файл или нет чтоб потом посмотреть). //выплевываем данные с массива базы в массив сессии... } else { session_destroy(); setCookie(SESSION_NAME, null, 0, SESSION_PATH, SESSION_DOMAIN, SESSION_SECURE, SESSION_HTTPONLY); } }}//echo '<pre>';//print_r($_SESSION);//echo '</pre>';

Добавлено спустя   8 минут  17 секунд:
Указал в параметрах куки сессии SESSION_LIFETIME из соображений, если пользователь зашел на сайт, а файла нет, то скорее всего его долго не было. А раз долго не было, а кука сохранилась, значит он нажимал на (запомнить).
Хотя может я и не прав. Время жизни файла сессии по умолчанию вроде, как помню, 1440 секунд

Отредактировано tipsun (2012.02.14 01:15)

Неактивен

#78 2012.02.14 00:44

tipsun
Moderator
Зарегистрирован: 2009.10.14
Сообщений: 2277
Карма: 19
Профиль

Re: авторизация $_COOKIE

Ну можно довести сохранение файла сессии до 60*60*6 = 6 часов или сделать 12 часов, не знаю.
Вероятность ошибочного присвоения метки (запомнить) будет меньше, наверно...

Отредактировано tipsun (2012.02.14 00:55)

Неактивен

#79 2012.02.14 14:56

tipsun
Moderator
Зарегистрирован: 2009.10.14
Сообщений: 2277
Карма: 19
Профиль

Re: авторизация $_COOKIE

Вроде, готово.

Код:

1
span style="color: #0000BB"><?php//+ Это можно отдельно где-то держать...define('DS', DIRECTORY_SEPARATOR);define('SESSION_NAME', 'SID');define('SESSION_LIFETIME', 604800); //1 week/неделяdefine('SESSION_PATH', DS);define('SESSION_DOMAIN', '.' . $_SERVER['HTTP_HOST']);define('SESSION_SECURE', false);define('SESSION_HTTPONLY', true);//- Это можно отдельно где-то держать...include_once 'db.php'; //PDO Driversession_name(SESSION_NAME);if (isset($_COOKIE[SESSION_NAME])) { session_start(); if (! isset($_SESSION['SELF'])) { $_SESSION = array(); $query = $db->prepare("SELECT `uid` FROM `users` WHERE `session_id`=? LIMIT 1;"); $query->execute(array($_COOKIE[SESSION_NAME])); if ($query->rowCount()) { $_SESSION['SELF'] = true; session_set_cookie_params(SESSION_LIFETIME, SESSION_PATH, SESSION_DOMAIN, SESSION_SECURE, SESSION_HTTPONLY); session_regenerate_id(true); $_SESSION += $query->fetch(PDO::FETCH_ASSOC); $query = $db->prepare("UPDATE `users` SET `session_id`=:new WHERE `session_id`=:old LIMIT 1;"); $query->execute(array(':old' => $_COOKIE[SESSION_NAME], ':new' => $_COOKIE[SESSION_NAME] = session_id())); } else { session_destroy(); setCookie(SESSION_NAME, null, //Session value 0, //Session lifetime SESSION_PATH, SESSION_DOMAIN, SESSION_SECURE, SESSION_HTTPONLY); } }}///*echo '<pre>';print_r($_COOKIE);echo '</pre>';//*/

Отредактировано tipsun (2012.02.16 17:49)

Неактивен

#80 2012.02.29 16:10

tipsun
Moderator
Зарегистрирован: 2009.10.14
Сообщений: 2277
Карма: 19
Профиль

Re: авторизация $_COOKIE

В базе нужно будет помимо `session_id` сделать еще `session_expire`, а то кука удалится, а поле в базе с этим `session_id` будет активна.
Мне так кажется.

Отредактировано tipsun (2012.02.29 16:10)

Неактивен

Дополнительно

forum.wapinet.ru

PunBB Mod v0.6.2
0.014 s