2015-11-13 88 views
-4

我来自一个经典的ASP编程背景,而男孩PHP真的很让人沮丧。 PHP Sessions有什么优势?在经典ASP中,您只需输入:PHP会话消失

<% Session("Name") = "XYZ" %> 

并且该会话始终可用,除非您杀死它或超时。使用PHP,我得到一个会话从一个页面到另一个页面,但是当我刷新页面时,我失去了会话。这里是我的代码有:

页:modules.php

// Start the session 
session_start(); 

页:index.php文件

include 'modules/modules.php'; 

$_SESSION['username'] = "MyName"; 

if (isset($_SESSION['username']) && !empty($_SESSION['username']) { 
    header('Location: main.php'); 
} 

页:main.php

include 'modules/modules.php'; 

echo "My username: ".$_SESSION['username']; 
exit(); 

现在,因为我给会话用户名一个默认值,它将重定向到main.php,并显示用户名罚款。但是,如果我刷新页面,它会消失。我跑了这个,看看modules.php页面是否在启动会话正下方有错误:

ini_set('display_errors',1); 
ini_set('display_startup_errors',1); 
error_reporting(-1); 

没有被返回。但我不明白为什么我的PHP会话消失。我正在尝试创建一个登录页面,用户将登录并且他/她的信息将在每个页面上传输,以便我可以在那里获得身份信息并确保他们已登录。那么,有人可以告诉我我在做什么错误?

我模块Page:

// Start the session 
session_start(); 

/* Database Connection Settings */ 
$_SESSION['servername'] = "localhost"; 
$_SESSION['mysql_username'] = "xxxxxxx"; 
$_SESSION['mysql_password'] = "xxxxxxx"; 
$_SESSION['dbname']   = "mydb"; 

//Turn on Error Report. True = On/False = Off 
ErrorReporting(true); 

//Display Error. 
function ErrorReporting($ErrOn){ 
    if ($ErrOn == true) { 
     //Show Error 
     ini_set('display_errors',1); 
     ini_set('display_startup_errors',1); 
     error_reporting(-1); 
    } 
} 


function db_conn($servername, $mysql_username, $mysql_password, $dbname) { 

$conn = mysqli_connect($servername, $username, $password, $dbname); 

// Check connection 
if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 

// Test if connection succeeded 
if(mysqli_connect_errno()) { 
    die("Database connection failed: " . 
     mysqli_connect_error() . 
     " (" . mysqli_connect_errno() . ")" 
    ); 
    } 
} 

    /************************************** 
    Close Database Connection Function. 
***************************************/ 
function db_disconn() { 
    $conn = null; 
} 

/*************************************** 
Employee Login Check: 
****************************************/ 
function CheckLogin($strUserName, $strPassword) { 

if (isset($strUserName) && !empty($strUserName) && isset($strPassword) &&  !empty($strPassword)) { 

    $conn = new mysqli($_SESSION['servername'],  $_SESSION['mysql_username'], $_SESSION['mysql_password'], $_SESSION['dbname']); 
    // Check connection 
    if ($conn->connect_error) { 
     die("Connection failed: " . $conn->connect_error); 
    } 

      $sql = "SELECT id, firstname, lastname, user_name, password FROM tbl_employees WHERE user_name='$strUserName' AND password='$strPassword' AND account_disabled='';"; 
     $result = $conn->query($sql); 

    //Check and see if there are records avaiable. 
    if ($result->num_rows > 0) { 
     // output data of each row with a loop. 
     while($row = $result->fetch_assoc()) { 

      //Store the info into a session variable. 
      $_SESSION['eid']  = $row["id"]; 
      $_SESSION['firstname'] = $row["firstname"]; 
      $_SESSION['lastname'] = $row["lastname"]; 

      return $_SESSION["eid"]; 
      //break; //Stop the loop process. 
     } 
    } else { 
      //No records found prompt the user. 
      return "User name or Password was Incorrect! Please try again!"; 
    } 
    db_disconn(); /*Close db*/ 
} 

}

+3

'$ _SESSION'不是一个函数,它是一个关联数组。使用'['和']'而不是'('和')'。 –

+0

好吧,我做错了什么呢?我更正了['用户名']的代码。 –

+0

'$ _SESSION('username')' - >'$ _SESSION ['username']' –

回答

0

你调用$ _SESSION,就好像它是一个功能 - $_SESSION("username") - 而它实际上是一个数组。

您应该使用$_SESSION["username"]来获取变量值。

您应该得到一个致命错误:不能在写入上下文中使用函数返回值...但您可能在打开错误报告时出错,并且没有收到任何错误。

正确的工作代码应该是这样的:

<?php 
session_start(); 

if (isset($_SESSION["username"]) && !empty($_SESSION["username"])) { 
    echo "My username: ".$_SESSION["username"]; 
} else { 
    echo "Not set"; 
    $_SESSION["username"] = "MyName"; 
} 
+0

对不起,我纠正了代码。我无法复制我的,因为我有敏感信息,所以我在这里创建了一个示例。并搞砸了['用户名']。我在上面纠正了它。但是,如果我刷新页面,为什么我的会话会消失? –

+0

您的会话是否被保存? http://stackoverflow.com/questions/19692157/session-variables-not-working-php –

+0

@FrankG你不能指望任何人对你,如果你正在修改的表象使用的代码的解决方案;分享您遇到的问题的代码 - 会议可能是罚款,这是周围的代码不起作用。 – Repox