2010-10-25 77 views
15

這是真的嗎?PHP session_start()

它是否基於cookie啓動當前會話?從PHP網站得到了這一點。 PHP如何控制會話?如果我在用戶打開登錄頁面時開始會話,我甚至會使用該會話進行什麼操作?我可以使用當前會話獲取有關登錄用戶的信息嗎?

回答

17

的PHP會議系統讓你安全地存儲數據的$_SESSION全局數組英寸一個典型的例子是用戶的識別碼存儲在會話時,他們在密碼輸入:

if ($user = try_login($login, $password)) 
    $_SESSION['user'] = $user; 

然後,您可以訪問所有其他頁面的信息:

if (isset($_SESSION['user'])) 
    // logged in ! 
    echo user_name($_SESSION['user']); 

的數據存儲在服務器,所以沒有篡改的風險(另一方面,請注意您的磁盤使用情況)。

啓動會話讓當前請求使用$_SESSION。如果這是用戶的第一次訪問,則該數組將爲空,並且會爲您發送新的會話cookie。

關閉會話只會阻止當前的請求使用$_SESSION,但數據會留待下一個請求。

銷燬會話會永遠扔掉所有的數據。會議在上次訪問後的一段時間內(通常約30分鐘)被銷燬。

+0

噢好吧。所以它是一個空的全局數組,您可以使用它來存儲用戶值(或其他值),以保持其在網站中的獨特體驗。 – Scott 2010-10-25 14:56:32

2

PHP的在session_start開始或恢復HTTP會話,這是本文中介紹的還算不錯:

http://en.wikipedia.org/wiki/Session_(computer_science)

一個HTTP「會話」的概念是不特定於PHP,它在許多的二手(所有?)服務器端HTTP框架作爲允許某些狀態跨不同請求/響應進行存儲/關聯的一種方式(因爲HTTP是無狀態的)。唯一的令牌(通常但不總是存儲在cookie中)標識特定的客戶端,服務器可以關聯「會話」。

下面是關於特別會議和PHP,可以幫助一些更多的信息:http://www.php.net/manual/en/book.session.php

2

像它說,在手冊

session_start()創建一個會話或恢復基於傳遞會話標識符當前的通過GET或POST請求,或通過cookie傳遞。

如果您在您的登錄頁面啓動一個新的會話,會話初始爲空。您可以隨心所欲地存儲它,例如,在用戶登錄後存儲用戶標識。會話數據在關閉會話時被銷燬。

您可能需要閱讀的Session Extension Manual Pages所有章節,也看到

9

我假設你想知道PHP會話對你來說意味着什麼,程序員。

當你做session_start()時,你告訴PHP你想使用會話。這可作爲一個名爲$ _SESSION的數組提供給您。你可以像使用其他數組一樣使用它,區別在於你放置在那裏的東西從一個頁面到另一個頁面(只要在每個頁面的開始處使用session_start())。

實際機制可能因配置而異(php.ini),但典型的安裝可以使用cookie進行會話。假設您的網絡服務器在Linux上,並且您正在使用Cookie。您做以下

session_start(); 
$_SESSION['name']='Bob'; 

當PHP看到這一點,創建一個具有半隨機名稱的文本文件(例如sess_a3tfkd5558kf5rlm44i538fj07),堅持在那裏的$ _SESSION內容爲純文本,然後發送一個cookie的用戶與會話ID,可用於查找會話文件(例如a3tfkd5558kf5rlm44i538fj07)。

當用戶下一次回來時,他將手中的會話ID放在他的cookie中,PHP會轉到相關文件並將其內容加載到$ _SESSION中。

你會注意到,實際的信息保存在服務器上,而用戶只有一個ID。有點像在俱樂部裏穿上你的外套,拿到一張帶有號碼的票。

+0

因此,如果我在每個頁面上啓動會話,PHP如何知道從最後一頁的$ SESSION變量維護相同的信息,該cookie? – Scott 2010-10-25 15:42:05

+1

@Scott - 如果用戶有一個會話ID匹配現有會話(現有會話文件)的cookie,session_start()將恢復會話。否則它開始一個新的。 – 2010-10-26 08:27:20

0

您可以比較PHP會話和cookie,但會話是更安全的存儲信息的方式。 Cookie將數據存儲在用戶計算機上,但安全地將會話存儲在服務器上的臨時文件中。 我已經討論會議,以及如何使用它在我的博客文章之一 - How to start a PHP session, store and accessing Session data?

下面是PHP會話存儲數據的示例代碼:

<?php 
session_start(); 
$_SESSION["name"] = "John"; 
?> 

下面是retriving會話數據的例子:

<?php 
session_start(); 
echo $_SESSION["name"]; 
?> 

上述代碼將顯示名稱「John」。

來源:How to start a PHP session, store and accessing Session data?