Вы не зашли.
Главная » PHP » авторизация $_COOKIE
#71. Gemorroj Off (107)
Administrator
2012.02.11 09:09
$_COOKIE['PHPSESSID'] - лучше не использовать дефолтовое название, а ставить свое
#72. tipsun Off (19)
Moderator
2012.02.11 12:12
Код:
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:01)
#73. Gemorroj Off (107)
Administrator
2012.02.11 13:01
да и не SID тоже, лучше подгонять под конкретный проект. на вапинете скажем, сессия SID может ставится и в блогах и на форуме. в таком случае они будут перезаписывать друг друга.
лучше называть что-то типа wapinet_blog, wapinet_forum и т.д.
#74. tipsun Off (19)
Moderator
2012.02.13 15:03
Чет не удаляется печенюха с "лисы".

Простая сессия, кука пропадает после закрытия браузера.
Чет она не удаляется. Видимо только при закрытии браузера only.
Или все-таки можно удалить?
Код:
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
Код:
echo '<pre>';
print_r(session_get_cookie_params());
echo '</pre>';
Отредактировано tipsun (2012.02.13 15:03)
#75. tipsun Off (19)
Moderator
2012.02.13 18:06
И зачем session_get_cookie_params() вообще нужна, если она нифига не работает...
Можно как-то о куке которая у браузера узнать побольше?
- - - -
Точнее работает, когда указано явно session_set_cookie_params() или через ini_set() наверно.
Отредактировано tipsun (2012.02.13 18:06)
#76. Gemorroj Off (107)
Administrator
2012.02.13 18:06
tipsun написал:
И зачем session_get_cookie_params() вообще нужна, если она нифига не работает...
работает в соответствии с документацией.
на серверных языках о куках особо инфы не получить. видимо.
#77. tipsun Off (19)
Moderator
2012.02.14 00:12
Код:
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:01)
#78. tipsun Off (19)
Moderator
2012.02.14 00:12
Ну можно довести сохранение файла сессии до 60*60*6 = 6 часов или сделать 12 часов, не знаю.
Вероятность ошибочного присвоения метки (запомнить) будет меньше, наверно...
Отредактировано tipsun (2012.02.14 00:12)
#79. tipsun Off (19)
Moderator
2012.02.14 14:02
Вроде, готово.
Код:
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:05)
#80. tipsun Off (19)
Moderator
2012.02.29 16:04
В базе нужно будет помимо `session_id` сделать еще `session_expire`, а то кука удалится, а поле в базе с этим `session_id` будет активна.
Мне так кажется.
Отредактировано tipsun (2012.02.29 16:04)
Страниц: 16 7 8 9 1012 Все
Главная
WEB
PunBB Mod v0.6.2
0.017 s