Вы не зашли.
Главная » PHP » авторизация $_COOKIE
#81. tipsun Off (19)
Moderator
2012.03.04 03:03
Код:
span style="color: #0000BB"><?php/*-- +MySQL-- Table structure for table `users`--CREATE TABLE IF NOT EXISTS `users` ( `user_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `session_id` varchar(32) NOT NULL, `session_expire` timestamp NULL DEFAULT NULL, PRIMARY KEY (`user_id`), KEY `session_id` (`session_id`), KEY `session_expire` (`session_expire`)) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=120 ;---- Dumping data for table `users`--INSERT INTO `users` (`user_id`, `session_id`, `session_expire`) VALUES(1, '12345', '2012-03-05 14:23:59');-- -MySQL*///define('SESSION_NAME', 'SID_CAPTCHA');//define('SESSION_NAME', 'SID_SPECIAL');define('SESSION_NAME', 'SID_DEFAULT');define('SESSION_EXPIRE', 129600);define('SESSION_PATH', DIRECTORY_SEPARATOR);define('SESSION_DOMAIN', ('.' . $_SERVER['HTTP_HOST']));define('SESSION_SECURE', false);define('SESSION_HTTPONLY', true);define('TIMESTAMP', 'Y-m-d H:i:s');//ini_set('display_errors', 1);//error_reporting(E_ALL);//include_once 'db.php'; //PDO Driver/*setCookie(SESSION_NAME, '12345', //Session value SESSION_EXPIRE + $_SERVER['REQUEST_TIME'], //Session lifetime SESSION_PATH, SESSION_DOMAIN, SESSION_SECURE, SESSION_HTTPONLY);*///$_COOKIE['someKey'] = 'someValue';session_name(SESSION_NAME);if (isset($_COOKIE[SESSION_NAME])) { session_start(); if (! isset($_SESSION['SELF'])) { $_SESSION = array(); $query = $db->prepare("SELECT `user_id` FROM `users` WHERE `session_id` = ? AND `session_expire` > NOW() LIMIT 1;"); //$query = $db->prepare("SELECT `user_id` FROM `users` WHERE `session_expire` > NOW() AND `session_id` = ? LIMIT 1;"); //$query = $db->prepare("SELECT `user_id` FROM `users` WHERE `session_expire` > '" . date(TIMESTAMP) . "' AND `session_id` = ? LIMIT 1;"); $query->execute(array($_COOKIE[SESSION_NAME])); if ($query->rowCount()) { $_SESSION['SELF'] = true; session_set_cookie_params(SESSION_EXPIRE, SESSION_PATH, SESSION_DOMAIN, SESSION_SECURE, SESSION_HTTPONLY); session_regenerate_id(true); $_SESSION += $query->fetch(); $query = $db->prepare("UPDATE `users` SET `session_expire` = NOW() + INTERVAL '" . SESSION_EXPIRE . "' SECOND, `session_id` = :new WHERE `session_id` = :old LIMIT 1;"); //$query = $db->prepare("UPDATE `users` SET `session_expire` = '" . date(TIMESTAMP, SESSION_EXPIRE + $_SERVER['REQUEST_TIME']) . "', `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 expire. SESSION_PATH, SESSION_DOMAIN, SESSION_SECURE, SESSION_HTTPONLY); unSet($_COOKIE[SESSION_NAME]); } }}//*echo '<pre>';print_r($_COOKIE);print_r($_SESSION);echo '</pre>';//*/
Отредактировано tipsun (2012.03.04 12:12)
#82. tipsun Off (19)
Moderator
2012.03.04 12:12
Вопрос, как лучше?
Средствами MySQL пользоваться NOW(), INTERVAL или средствами php?
#83. Gemorroj Off (107)
Administrator
2012.03.04 12:12
ключ с session_expire вероятно лучше убрать
Добавлено спустя    14 секунд:
лучше mysql
#84. tipsun Off (19)
Moderator
2012.03.04 12:12
Ок. Спс.
#85. tipsun Off (19)
Moderator
2012.03.04 13:01
Код:
span style="color: #0000BB"><?php-- нетWHERE `session_expire` > NOW() AND `session_id` = ?-- даWHERE `session_id` = ? AND `session_expire` > NOW()
Отредактировано tipsun (2012.03.04 13:01)
#86. tipsun Off (19)
Moderator
2012.03.09 01:01
Только сейчас додумался, что можно пароль и потом проверить. Вот дурья башка.
Обычно с запросом проверяется.

Код:
span style="color: #0000BB"><?php$getName = $_GET['name'];$getPassword = $_GET['password'];$query = $db->prepare("SELECT `user_id`, `user_password` FROM `users` WHERE `user_name` = ? LIMIT 1;");$query->execute(array($getName));$result = $query->rowCount();if ($result and isSet($_GET['auth'])) { $array = $query->fetch(); if ($array['user_password'] == md5($getPassword)) { // Добро пожаловать. exit('1'); } else { // Неверный пароль. exit('2'); }}else if (! $result and isSet($_GET['save'])) { $db->prepare("INSERT INTO `users`(`user_name`, `user_password`) VALUES(?, ?);")->execute(array($getName, md5($getPassword))); // Теперь вы пользователь. exit('3');}else { // Нет такого пользователя. // Или имя пользователя занято. // Или не нажали кнопку. if (isSet($_GET['auth'])) exit('4'); else if (isSet($_GET['save'])) exit('5'); else exit('6');}
Отредактировано tipsun (2012.03.09 01:01)
#87. tipsun Off (19)
Moderator
2012.06.29 10:10
Хотел в класс запихать код для старта сессии при получении печеньки и при присутствии/отсутствии файла сессии, но чет не знаю как практичней.
Не хочу трогать базу, ну через конструктор заносить сингтон базы.
Я за независимость smile
Просто почитал чуть про хороший код. И типа лучше всего, когда класс не зависит от другого класса/кода.
Добавлено спустя   1 минуту  9 секунд:
Сейчас наброски скину.
#88. tipsun Off (19)
Moderator
2012.06.29 12:12
Еще думал, как принимать тучу параметров печенья.
Была мысль о ini_set()
Но потом подумал, это на 1 раз или нет,
т.к. другие скрипты тоже могут использовать сессию.
Код:
span style="color: #0000BB"><?phpclass Ticket{// Набросок. const LONG = 129600; private $_id; public function __construct ($var) { if (isset($_COOKIE[$var])) { session_name($var); session_start(); $this->_id = $var; } } public function isCorrect () { if (isset($_SESSION[$_COOKIE[$this->_id]])) { return true; } else { return false; } } public function register () { $_SESSION = array(); session_set_cookie_params(SESSION_EXPIRE, SESSION_PATH, SESSION_DOMAIN, SESSION_SECURE, SESSION_HTTPONLY); session_regenerate_id(true); // если сессия не запущена, то функция сработает, откроет новую сессию? $_COOKIE[$this->_id] = session_id(); } public function unregister () { setcookie($this->_id, null, //Session value. 0, //Session expire. SESSION_PATH, SESSION_DOMAIN, SESSION_SECURE, SESSION_HTTPONLY); unset($_COOKIE[SESSION_NAME], $_SESSION); session_destroy(); }}
Добавлено спустя   5 минут  54 секунды:
Можно сказу задать параметры через конструктор или потом в методе указывать...
Добавлено спустя   6 минут  55 секунд:
Или плюнуть на файлы и сделать класс на базе?
Отредактировано tipsun (2012.06.29 12:12)
#89. Gemorroj Off (107)
Administrator
2012.06.29 13:01
файлы в случае с сессиями устроят в 95% случаев, так что замачиваться я бы не стал. либо сразу писать прослойки для работы с сессиями в разных хранилищах.
#90. tipsun Off (19)
Moderator
2012.06.29 13:01
Ну если файлы использовать.
Просто прослойку хочу сделать.
Страниц: 17 8 9 10 11 12 Все
Главная
WEB
PunBB Mod v0.6.2
0.017 s