doublench21
@doublench21

Как решить проблему времени сессии в php ?

Есть такая форма. Хотел по клику "Запомнить меня: " установить сессию на 24 часа, а иначе сессия живет до закрытия браузера.
<fieldset>
			<legend>Вход: </legend>
					<form method="POST">
					<p>Введите логин: </p><input type="text" name="login" value="">
					<p>Введите пароль: </p><input type="password" name="password" value="">
					<p>Запомнить меня: <input type="checkbox" name="remember" value="yes"></p>
					<p></p><input type="submit"	value="Войти" name="submit">	
				</form>
				<p><a href="reg.php">Зарегистрироваться</a></p>
		</fieldset>

Вот php скрипт, место с проблемой (наверное) указал в комментах. В чём дело ?
if(isset($_POST['login'], $_POST['password'], $_POST['submit'])) {
		$qwe=isset($_POST['remember']);
		
		//var_dump($_POST['login'], $_POST['password'], $_POST['remember'], $_POST['submit']);
		if($_POST['login']=="" || $_POST['password']=="") 
			echo "Не все поля заполнены! Повторите попытку...";
		else {
				if(!mysql_connect("localhost", "root", ""))
					("Error ".mysql_errno()." ".mysql_error()."\n");

				mysql_select_db("vk");
				mysql_set_charset("utf8");
				$sql_login="SELECT * FROM `user` WHERE `user`.`login`=\"".$_POST['login']."\"";
				$sql_password="SELECT * FROM `user` WHERE `user`.`password`=\"".md5($_POST['password'])."\"";
				$q=mysql_query("$sql_login")
					or die("Error ".mysql_errno()." ".mysql_error()."\n");
				$q1=mysql_query("$sql_password")
					or die("Error ".mysql_errno()." ".mysql_error()."\n");	

				if(mysql_num_rows($q)!=0 && mysql_num_rows($q1)!=0) {
					/* Определяем session_id */
					/* Установка cookie */
/* ТУТ И ВЫХОДИТ БЕДА. УСТАНАВЛИВАЕТ НЕ НА 24 часа КОГДА ЭТО НУЖНО */
					if($qwe)
						session_set_cookie_params(3600*24); // 24 часа - время жизни кукки
					if(!$qwe)
						session_set_cookie_params(0); // до закрытия браузера- время жизни кукки
					

					session_start();	// session_id() - возвращает id текущей сессии
					$_SESSION['login']=$_POST['login']; // элементы массива $_SESSION доступны везде для текущей сессии
					header( "Location: profile.php?id=".$_SESSION['login']);
				} else
					
					echo "Неверный логин или пароль! Повторите попытку...";
			}
	}


P.S. И ещё бы хотелось узнать, как полностью оборвать сессию заранее ?
  • Вопрос задан
  • 2844 просмотра
Решения вопроса 2
Melkij
@Melkij
PostgreSQL DBA
Вы пошли неверным путём.
Вашу сессию всё равно через некоторое время вычистит сборщик мусора.
А то, что у вас останется сессионная кука на сутки - ничем не поможет без соответствующего файла сессии.
Вешайте свою собственную куку, с уникальным токетом. По нему отслеживайте, что это за пользователь и надо ли его вспоминать.
Ответ написан
Комментировать
zoonman
@zoonman
⋆⋆⋆⋆⋆
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
doublench21
@doublench21 Автор вопроса
Я просто не могу понять почему не срабатывает условие. Проверяю через var_dump, всё как надо. Стоит выставить в обоих условиях одно время, оно и будет.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы