2012-07-07 174 views
1

在PHP中使用任何會話變量之前是否不強制使用session_start()? 我試了下面一段代碼,沒有在開始時聲明session_start(),它工作正常。聲明會話變量php

所以,現在我很困惑。請幫忙 !!!!

此外,我沒有使用任何$ _POST或$ _GET將$ uname傳遞給home.php,但它仍然如何工作?如果我們使用include'home.php',那麼它會將login.php和home.php視爲同一頁嗎?

// code login.php// 
<? 
require_once 'db_connect.php'; 

if (isset($_SESSION ['user_id']) && !empty($_SESSION ['user_id'])) 
{ 

    $u_name = $_SESSION['user_name']; 
    include 'home.php'; 
} 
else 
{ 
//some stmt 
} 
?> 

/*******home.php file ****/ 

<?php 
require_once 'dbconnect.php'; 
$_SESSION['username'] = $u_name; 
//echo $_SESSION['username']; 
//blah blah 
?> 

回答

2

如果session.autostart沒有在php.ini中設置,您肯定需要它。但是你可能會知道那個。

你不在db_connect.php中調用它嗎?此外,我敢肯定,你不會有任何錯誤,會議只是空的。

+0

是的......我在db_connect中調用它。所以,如果我在db_connect中調用,那麼我不需要在home.php中再次調用?我可以包含任何數量的文件並在其中使用會話變量嗎? – preet 2012-07-07 00:12:36

+0

是的,session_start只需要爲服務器的每個請求調用,就像32bitfloat解釋的那樣。包含/必需的腳本不在自己的範圍內運行 – 2012-07-07 00:16:28

+0

好的.....現在清除!謝謝MrAzulay和32bitfloat – preet 2012-07-07 00:19:42

1

如果你通過php包含一個文件,Session保持活動狀態(因爲任何其他變量也被設置)。如果您要將此文件作爲新請求訪問,則需要設置session_start()。 此行爲是因爲include和require需要將包含文件的代碼移動到當前代碼中,就像您將代碼鍵入到單個文件中一樣。

另外:你不需要兩次需要dbconnect.php。

編輯:你問了兩個文件用作同一頁 - 該頁面是在整個php代碼完成後給出的輸出。頁面本身並不關心在內部使用多少文件來生成它。

+0

所以是這樣的原因,我不必通過POST或GET方法將$ u_name傳遞給home.php,並可以在home.php中使用它? – preet 2012-07-07 00:28:09

+0

是的,這是正確的。所有變量都被共享到所需的文件。 – 2012-07-07 00:31:37

+0

實際上是的,但要注意在if條件中設置$ u_name。如果這個條件返回false,你會在home.php中得到一個「未定義變量」的錯誤,所以最好用isset()或其他方法檢查它。 – 32bitfloat 2012-07-07 00:33:06

0

使用session_start()對於php中的每個會話都是強制性的。通過一個變量值不需要使POST或GET相同,因爲已經存在這種情況下的值增量。如果在同一個會話中沒有任何值爲空或空白,如果以與條件錯誤相同的方式打開頁面。

(!Isset($_SESSION ['user_id']) &&!​Is_Null($_SESSION['user_id']))

isset檢查,如果空這方面的需求!之前,IF(!isset($_SESSION['user_id']),第二種情況是檢查它是否無效,因爲會話存在或不存在,並且如果設置了值,則inesistente爲空。所以正確的看法是:is_null($_SESSION ['user_id'])

重要的是,在登錄頁面不包括但是重定向到頁面。在header的情況下。

或者可以在單個頁面中完成所有操作,但在稱爲登錄頁面的頁面上顯示將不合法。默認值是索引,即如果登錄保留在文件夾中,則將其放在索引頁和文件夾的地址中。

會話仍然可以打開的原因是,有時Web服務器沒有意識到已刪除部分代碼並從系統緩存中加載它。

+1

總是設置'session_destroy();'當你想註銷 – 2014-07-21 11:36:37