2015-11-13 90 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