не работает сессия..

Тема в разделе "PHP", создана пользователем sunyang, 27 май 2011.

Модераторы: latteo
  1. sunyang

    sunyang

    Регистр.:
    25 апр 2009
    Сообщения:
    444
    Симпатии:
    30
    пытаюсь перейти на страницу parser.php со страницы index.php и проверить сессию, но в сессию ничего не записывается...

    содержимое index.php:

    PHP:
    <?php
    // display not
    function actNote(){
        global 
    $status;
        if(!empty(
    $status)){
            print 
    "<br><div class='stat'><img src='images/error.gif' style='float:left'>&nbsp;{$status}</div><br>";
        }
    }

    // string entity
    function str_ent($str){
        
    $str str_replace('"','&quot;'$str);
        
    $str str_replace('<''&lt;',  $str);
        
    $str str_replace('>''&gt;',  $str);
        return 
    $str;
    }

    //if(!defined('in_site')) die('Hacking attempt');


    // login
    if(!empty($_POST['submit']) && $_POST['submit']=='login')
    {
        
    $username str_ent($_POST['username']);
        
    $password str_ent($_POST['password']);
        
        if(empty(
    $username) or empty($password)) {
            
    $status "All field are required";
        }
        else{
            
    $admin_username "admin";
            
    $admin_password "pass";
            
            if(
    $admin_username!=$username){
                
    $status "Ошибка имя пользователя";
            }
            else if(
    $admin_password!=$password){
                
    $status "Ошибка пароля";
            }
            else{

                
    // set admin name
                
    $_SESSION['administrator'] = $username;
                
                
    // redirect to main page
                
    header("Location: parser.php");
                
                
    // exit page
                
    exit();
            }
        }
    }
    ?>


        <? actNote() ?>

        <h2>Вход в парсер</h2>
        
        <table cellspacing="1" cellpadding="5" border="0">
        <form method="post">
        <input type="hidden" name="submit" value="login">
        <tr>
            <td align="right">Имя ползователья:</td>
            <td><input type="text" name="username" class="text"></td>
        </tr>
        <tr>
            <td align="right">Пароль:</td>
            <td><input type="password" name="password" class="text"></td>
        </tr>
        <tr>
            <td colspan=2 align="center">
                <input type="submit" value="Вход" class="button">
                <input type="reset" value="Сброс" class="button">
            </td>
        </tr>
        </form>
        </table>
    содержимое perser.php, где проверяем сессию:

    PHP:
    <?
    // проверка сессии админа
    echo $_SESSION['administrator'];
    ?>
    - ничего не выдает(

    Куда пропала $_SESSION['administrator'] ?))
     
  2. zzallexx

    zzallexx

    Регистр.:
    11 июн 2008
    Сообщения:
    1.036
    Симпатии:
    699
    в оба файла добавь
    PHP:
    session_start();
     
  3. sunyang

    sunyang

    Регистр.:
    25 апр 2009
    Сообщения:
    444
    Симпатии:
    30
    да, добавил session_start();
    заработало, НО...прописываю в начале parser.php
    PHP:
    <? session_start();
    if(!
    defined($_SESSION['administrator'])) die('Hacking attempt');
    ?>
    после чего идет другой код

    выдает Hacking attempt

    Хотя логи в index.php ввожу верные.

    из-за чего такое может быть?

    Добавлено через 21 минуту
    с этим разобрался)
    Тепер не могу убить сессию, тобишь сделать кнопку выход.

    вот кнопка:

    HTML:
    <p><a href="/parser/index.php?act=logout"><b>ВЫХОД из парсера</b></a></p>
    PHP:
    <?
    // logout
    if(!empty($_SESSION['administrator']) && !empty($_GET['act']) && $_GET['act']=='logout'){
        
    $_SESSION['administrator'] = null;
        
    session_destroy();
        
    header("Location: index.php");
    }
    ?>
    все равно хранится сессия.

    Как убить сессию админа?
     
  4. dino

    dino

    Регистр.:
    28 май 2009
    Сообщения:
    550
    Симпатии:
    204
    попробуй использовать session_unset()
     
  5. horpah

    horpah

    Регистр.:
    21 июн 2010
    Сообщения:
    200
    Симпатии:
    55
    Обычно убиваю сессии так:
    PHP:
    $_SESSION=array();
    И все что там было от авторизации (id юзера например, статус, прочая мелочь) канет в лету.
     
  6. zzallexx

    zzallexx

    Регистр.:
    11 июн 2008
    Сообщения:
    1.036
    Симпатии:
    699
    PHP:
    <? 
    session_start();
    if(isset(
    $_GET['act']) && $_GET['act']=='logout'){
    unset(
    $_SESSION['administrator']); // разрегистрировали переменную
    session_destroy(); // разрушаем сессию
    header("Location: index.php"); //редиректимся
    }
    ?>
     
  7. zzzkabanzzz

    zzzkabanzzz Создатель

    Регистр.:
    15 июн 2011
    Сообщения:
    56
    Симпатии:
    4
    Сначала уничтожаете КАЖДУЮ переменную, а потом саму сессию! Только так будет работать!
     
  8. AXP

    AXP Создатель

    Регистр.:
    16 мар 2007
    Сообщения:
    27
    Симпатии:
    2
    чушь
    session_destroy должно убивать сессию.
     
  9. Miraage

    Miraage Angular/Laravel

    Регистр.:
    3 июн 2008
    Сообщения:
    230
    Симпатии:
    51
    PHP:
    unset($_COOKIE[session_id()]);
    $_SESSION = array();
    session_unset(); // для кучи :)
    session_destroy();