2014-10-27 3 views
-2

Я работаю с переменными сеанса PHP, но проблема в том, что переменные сеанса не переносятся. Я проверил использование Firebug и обнаружил, что переменные сеанса вообще не создаются. print_r($_SESSION); возвращает пустой массив после возврата страницы в index.php, но отображает его правильно перед обновлением. logincheck.php:Переменная сеанса PHP не переносится

<?php 
session_start(); 
error_reporting(-1); 
if(isset($_SESSION['logged_in']) && $_SESSION['logged_in']==true) 
{ 
$username=$_SESSION['username']; 
?> 
<!DOCTYPE html> 
<html> 
<head> 
    <title>Smart Shopping Cart System</title> 
    <meta name="viewport" content="width=device-width, initial-scale=1"> 
    <link rel="stylesheet" type="text/css" href="css/bootstrap.css"> 
    <style type="text/css"> 
    .show-grid{ 
     background:#E0E0E0; 
     }</style> 
</head> 
<body> 
<?php 
include "connection.php" 
?> 


//  ** Some Content** 
</body> 
</html> 
<?php 
} 
else 
{ 

    ?> 
    <html> 
<head> 
    <title>Log In | SmartCart</title> 
    <meta name="viewport" content="width=device-width, initial-scale=1"> 
    <link rel="stylesheet" type="text/css" href="css/bootstrap.css"> 
</head> 
<body> 

    <div class="navbar navbar-default"> 
     <div class="container"> 
      <div class="navbar-brand"> 
       SmartCart 
      </div> 

     </div> 
    </div> 

    <div class="container"> 
     <br /> 
     <div class="row"> 
      <div class="col-md-4"> 
      </div> 
      <div class="col-md-4"> 
       <form role="form" method="post" name="login" action="test.php"> 
        <div class="form-group"> 
         <label for="username">Operator Username</label> 
         <input type="username" class="form-control" name="username" placeholder="Enter your username"> 
        </div> 
        <div class="form-group"> 
         <label for="pass">Password</label> 
         <input type="password" class="form-control" name="pass" placeholder="Password"> 
        </div> 


        <button type="submit" class="btn btn-default" name="sub">Submit</button> 
       </form> 
      </div> 
      <div class="col-md-3"> 
      </div> 
     </div> 
    </div> 

</body></html> 
    <?php 

} 
?> 

test.php

<?php 
session_start(); 
error_reporting(-1); 
?> 
<html><head><title>Redirecting...</title> 
</head> 
<body> 
Redirecting.... 
<?php 
include "connection.php"; 

if(isset($_POST['sub'])) 
{ 
    $u_name=$_POST['username']; 
    $password=mysql_escape_string($_POST['pass']); 
    $password=mysql_escape_string($password); 
    $w="select * from operators where operator_username = '$u_name' AND operator_pass = '$password'"; 
    $b=mysql_query($w) or die(mysql_error()."in query $w"); 
    $num_rows = mysql_num_rows($b); 
    if($num_rows > 0) 
    { 

     $_SESSION['logged_in']=true; 
     $_SESSION['username']=$_POST['username']; 
     print_r($_SESSION); 
     echo '<meta http-equiv="refresh" content="0; url=index.php">'; 
    } 
    else 
    { 
     echo "<script> 
      alert('Your username or password is incorrect. Please try again'); window.location = 'index.php'; </script>"; 
    } 
} 

?> 
</body></html> 

Пожалуйста, помогите.

+0

проверить 'session_id()' в обоих сценариях. если вы получаете другое значение, то ваши настройки cookie сеанса почти наверняка ошибочны, и вы получаете другую/пустую сессию. –

+0

session_id() - это то же самое. Я проверил его с помощью Firebug. – user3736335

+0

проверить $ _SESSION ["loggedin"] = true; – avoliva

ответ

0

Я думаю, что под оценка отсутствует на странице test.php в $_SESSION['loggedin']=true; изменить это $_SESSION['logged_in']=true;

Как вы используете это в

if(isset($_SESSION['logged_in']) && $_SESSION['logged_in']==true) 

нет ошибок с вами сессионной частью ошибкой является, может быть в вас дб часть доступа проверьте подключение к базе данных. вы можете проверить свою сессию, комментируя часть запроса, она работает нормально.

+0

Это была ошибка, хотя ее изменение ничего не изменило. Переменные сеанса не переносятся (или не создаются в первую очередь). – user3736335

+0

нет никакой ошибки с вами, часть сеанса, в которой может быть ошибка, находится в вашей части доступа db, проверьте соединение с базой данных. вы можете проверить свою сессию, комментируя часть запроса, она работает нормально. –

+0

Черт! У меня был session_destroy() в моей connection.php. Я не знаю, почему я когда-либо писал это. Спасибо. Не могли бы вы включить этот комментарий в свой ответ? – user3736335

1

Пятно разница:

logincheck:

if(isset($_SESSION['logged_in']) && $_SESSION['logged_in']==true) 
        ^^^^^^^^^ 

тест:

$_SESSION["loggedin"]=true; 
       ^^^^^^^^ 

Одна из этих вещей не походит на другие ...

+0

Я редактировал код и сделал ошибку при вставке здесь. Просто исправит. Однако это не то, что вызывает ошибку. 'print_r ($ _ SESSION);' возвращает пустой массив после возврата страницы в index.php, но отображает его правильно перед обновлением. – user3736335

+0

Затем включите вывод отладки на уровне php.ini. нет смысла делать error_level внутри вашего скрипта, особенно когда он ПОСЛЕ вызова session_start(). у вас может возникнуть проблема с «заголовками, уже отправленными» и никогда не увидите ее, потому что вы не включаете отчетность, пока не стало слишком поздно. –

+0

О, и вы уязвимы для SQL-инъекций. Вы ** DOUBLE ** кодируете пароль и не беспокоитесь о том, чтобы избежать имени пользователя. Убедитесь, что ваш запрос работает правильно и в первую очередь задает ваши переменные сеанса. –

Смежные вопросы