Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.01.2011, 21:32   #1
Qaliti
Форумчанин
 
Регистрация: 04.01.2010
Сообщений: 229
По умолчанию проблема с печеньками =)

Изучаю сессии и куки в php. Хочу создать форму в которое пользователь вводит своё имя и попадает на сайт:
страница login.php
PHP код:
<?php
function login($username$zap) {
    if (
strlen($username) == 0) { return false; }
    
$_SESSION['name'] = $username ;
    if (
$zap == 0) {} else { 
        
setcookie('name'$_SESSION['name'], time() + 3600 24 7);
    }
    return 
true;
}

function 
logaut(){
    
setcookie("name");
    unset(
$_SESSION['name']);   
}

session_start();
logaut();
$name $_POST['name'];
$a login($name$_POST['zap']);
if (
$a == true) {header("Location: index.php");
}
?>

<html>
<head>
<title>Вход на сайт</title>
</head>
<body>
<p><h1>Фома входа:</h1></p>
Введите имя:
<form action="login.php" method="post">
<input type="text" name="name"><br/>
<input type="checkbox" name="zap"> Запонить на сайте <br />
<input type="submit" name="ok" value="Вход">
</form>
</body>
</html>
страница index.php:

PHP код:
<?php
session_start
();

if (isset(
$_SESSION['name'])) {header("Location: a.php");}
    else {
header("Location: login.php");}

?>
страница a.php:

PHP код:
<?php
session_start
();


?>
<html>
<head>
<title>Странциа A</title>
</head>
<body>
<p><h1>Просмотр страниц:</h1></p>
<a href="a.php">A</a> и <a href="b.php">B</a> сидели на трубе!
<p>Вы вошли как, <? echo $_SESSION['name'?>! Добро пожаловать! <a href="login.php">Выход</a></p>
<? session_destroy(); ?>
</body>
</html>
страница b.php:
PHP код:
<?php

session_start
();


?>
<html>
<head>
<title>Странциа B</title>
</head>
<body>
<p><h1>Просмотр страниц:</h1></p>
<a href="a.php">A</a> и <a href="b.php">B</a> сидели на трубе!
<p>Вы вошли как, <? echo $_SESSION['name'?>! Добро пожаловать! <a href="login.php">Выход</a></p>
<? session_destroy(); ?>
</body>
</html>
В странице login.php происходит вход пользователя, страница index.php её открыть не возможно она служит для перенаправления пользователя на нужную страницу. Страници a.php и b.php просто страницы которые должны быть доступны при входе под пользователем.

Проблема в том что даже если пользователь не поставит галочку чтоб запомнили его он серовно запоминается, в куках в браузере появляются пустые куки без содержания. И следовательно при закрытие браузера и нового открытия пользователю не приходиться вводить имя. И второя проблема я не знаю как выходить из сессии когда пользователь закрывает окно браузера... ну и подскажите так общие ошибки по коду, чувствую что он у меня ооооочень кривой... Зарание спасибо
Qaliti вне форума Ответить с цитированием
Старый 08.01.2011, 22:36   #2
kpachbiu
взагрузке.рф
Форумчанин
 
Аватар для kpachbiu
 
Регистрация: 13.06.2010
Сообщений: 117
По умолчанию

Если хочешь знать, у тебя вообще вообще кривой код и "подсказать какие ошибки по коду" - это переделать весь код

одно это чего стоит
Код:
function logaut(){ 
    setcookie("name"); 
    unset($_SESSION['name']);    
}
или это вообще не нужно в A.php и B.php
Код:
<? session_destroy(); ?>
Когда пользователь закрывает окно браузера сессия сама уничтожается (выходит из сессии).


п.с. название темы в топку!
Взагрузке.рф - Файлы для людей
Ищу художника или веб-дизайнера для создания браузерной онлайн игры! icq 340-289-851
kpachbiu вне форума Ответить с цитированием
Старый 08.01.2011, 22:45   #3
Qaliti
Форумчанин
 
Регистрация: 04.01.2010
Сообщений: 229
По умолчанию

тогда почему id сессии сохраняется в куках при выходе?..
Qaliti вне форума Ответить с цитированием
Старый 09.01.2011, 06:54   #4
lavacco
Пользователь
 
Регистрация: 06.01.2011
Сообщений: 12
По умолчанию

Цитата:
Сообщение от Qaliti Посмотреть сообщение
тогда почему id сессии сохраняется в куках при выходе?..
чтобы идентифицировать пользователя при следующем посещении.
http://ereality.in.ua/reg
lavacco вне форума Ответить с цитированием
Старый 09.01.2011, 08:36   #5
Qaliti
Форумчанин
 
Регистрация: 04.01.2010
Сообщений: 229
По умолчанию

ну.... тогда получается что печеньки наф не нужны? если пользователь откроет страницу - сессия будет продолжать и он не выйдет с сайта...а чтоб просто выйти с сайты удаляем айди из куков и все.... так получается чтоль?...
Qaliti вне форума Ответить с цитированием
Старый 09.01.2011, 09:24   #6
Виталий Желтяков
Старожил
 
Аватар для Виталий Желтяков
 
Регистрация: 19.04.2010
Сообщений: 2,702
По умолчанию

Сессии могут "умирать" через некоторое время. Хочу обратить внимание, что для FF сессионые куки лучше через js чистить.
Виталий Желтяков вне форума Ответить с цитированием
Старый 09.01.2011, 14:08   #7
Qaliti
Форумчанин
 
Регистрация: 04.01.2010
Сообщений: 229
По умолчанию

Переделал. С начало код был ровный, красивый, и не кривой в принципе все работало нормально, но есть проблемка сессия удаляется только через некоторое время после закрытия браузера, если вобще удаляется, я просто читал что она закрывается через 24 минуты, итог пришлось из-вращаться, делать его кривым, в итоге получилось что хотел сделать но получилось криво и не красиво... может у кого ни будь есть идеи как это сделать по проще?
вот страници:
login.php:
PHP код:
<?php
setcookie
('username2'''0"/");

 if (
$_COOKIE['ses'] == $_COOKIE['PHPSESSID']) {
                
header('Location: a.php');     
            } 
session_start();            


if (
strlen($_POST['username']) > 0
    {
        if (isset(
$_POST['zap'])) 
            {
                
setcookie ('username'$_POST['username'], time() + 3600 24 4);
            } else {
                
setcookie ('username2'$_POST['username']);
            }
            
            
setcookie ('ses'$_COOKIE['PHPSESSID']);
            
            
setcookie('prov''true'time() + 3600 24 4);
            
            
$_SESSION['username'] = $_POST['username'];
            
            
header('Location: a.php');
    }

?>


<html>
<head>
    <title>Страница входа</title>
    <meta http-equiv="Content-Type" content="text/html; charset=Windows-1251" />
</head>

<body>
    <p><h1>Форма входа:</h1></p>
    
    <form action="login.php" method="post">
    <input type="text" name="username"><br />
    <input type="checkbox" name="zap"> Запомнить на сайте<br />
    <input type="hidden" name="prov">
    <input type="submit" name="ok" value="Вход">
    </form>
    
</body>
</html>
a.php:
PHP код:
<?php

session_start
();

if (isset(
$_COOKIE['username2'])) {
        
setcookie('ses'''0"/");
    }

if (
$_COOKIE['prov']) {
            
    } else {
        
header('Location: end.php');
    }

?>

<html>
<head>
    <title>Страница A</title>
    <meta http-equiv="Content-Type" content="text/html; charset=Windows-1251" />
</head>
<body>
    <p><h1>Вы вошли как <? if (isset($_COOKIE['username'])) { echo $_COOKIE['username']; }
    else { echo 
$_COOKIE['username2']; } ?>
    . Добро пожаловать!
    <a href="end.php">Выход</a></h1></p>
    <a href="b.php">B</a> страница
</body>
</html>
b.php:
PHP код:
<?php

session_start
();

if (isset(
$_COOKIE['username2'])) {
        
setcookie('ses'''0"/");
    }

if (
$_COOKIE['prov']) {
            
    } else {
        
header('Location: login.php');
    }

?>

<html>
<head>
    <title>Страница B</title>
    <meta http-equiv="Content-Type" content="text/html; charset=Windows-1251" />
</head>
<body>
    <p><h1>Вы вошли как <? if (isset($_COOKIE['username'])) { echo $_COOKIE['username']; }
    else { echo 
$_COOKIE['username2']; } ?>
    . Добро пожаловать!
    <a href="end.php">Выход</a></h1></p>
    <a href="a.php">B</a> страница
</body>
</html>
end.php:
PHP код:
<?php
        session_start
();
        
session_unset();
        
session_destroy();
        
setcookie('username'''0"/");
        
setcookie('username2'''0"/");
        
setcookie('prov'''0"/");
        
setcookie('ses'''0"/");
        
header('Location: login.php')
?>
Вот архив с этими файлами для денвера http://fayloobmennik.net/301435
Qaliti вне форума Ответить с цитированием
Старый 09.01.2011, 14:21   #8
Qaliti
Форумчанин
 
Регистрация: 04.01.2010
Сообщений: 229
По умолчанию

эх блин.... если не поставить галочку запомнить закрыть браузер и попробовать опять зайти, только сразу на a.php то пользователь войдет =(
у меня уже идеи кончились... был бы хорошо и все на много упростилось если бы закрытие браузера как то обозначалось... к примеру $_SERVER['exit'] и если пользователь закрывает браузер то она принимает какое либо значение то это было бы идеально... может быть есть такая переменная или что то на подобие? :confu sed:
Qaliti вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с рамами/Проблема с ЖД DRAGGER Компьютерное железо 6 04.01.2009 23:37