![](/img/trans.png)
[英]Do I need to use session_start() in PHP to use $_SESSION?
[英]PHP session_start() function: Why I need it everytime I use anything related to PHP sessions
為了從我的網站注銷用戶,我將頁面重定向到logout.php
,在那里我使用 session_destroy() 函數。 即使在那里,如果沒有session_start()
函數,注銷功能也無法工作。 之前加入session_start()函數session_destroy()
函數,我能夠成功注銷用戶。
為什么我每次都需要在每個頁面中使用session_start()
函數,我正在做與會話相關的事情?
session_destroy() 銷毀活動會話。 如果不初始化會話,則不會有任何東西被銷毀。
為什么我每次都需要在每個頁面中使用 session_start() 函數,我正在做與會話相關的事情?
所以 PHP 知道要銷毀哪個會話。 session_start()
查看是否存在會話 cookie 或 ID。 只有有了這些信息,你才能摧毀它。
在默認配置中,PHP 會話在硬盤上運行。 PHP 要求您在需要此支持時明確告訴它以避免不必要的磁盤 IO。
session_start()
還告訴 PHP 找出用戶的會話是否存在。
session_start() 根據通過 GET 或 POST 請求或通過 cookie 傳遞的會話標識符創建會話或恢復當前會話。
根據http://php.net/manual/en/function.session-start.php
本質上,通過調用session_start()
,PHP 讀取標頭並將該會話 ID 交叉引用到您的系統(文件系統/數據庫/等)上的內容,然后可以填充與該特定用戶相關的$_SESSION
。 這反過來又允許您調用session_destroy()
因為它知道要實際銷毀哪個會話。
考慮 session_start() 作為你告訴 php 引擎的方式......你想使用會話。
而且,據我所知,始終將其設為 php 頁面中的第一行。
我對 session_start() 的用法感到困惑; 每次我使用會話變量時,我都會調用 session_start。 准確地說,我有 session_start(); 每個頁面上不止一次(甚至沒有調用 session_destroy())。 例如,
// 1st call
session_start();
if (!isset($_SESSION['UserID']))
{
// Do something
}
else
{
// Do something else
}
// .... some other code
// 2nd call
session_start();
if (!isset($_SESSION['UserID']))
{
// Do something totally different
}
else
{
// Do something else totally different
}
這給我帶來了性能問題。 所以我最終調用了session_start();
僅在頁面最頂部一次,一切似乎都運行良好。
您必須在您希望會話工作的每個文件中調用 session_start 一次(並且僅一次)。
允許您只調用一次的常用方法是將調度程序文件作為 index.php; 在此處調用 session_start 並讓此頁面包含基於 url 的 $_GET 的其他頁面。
<?php
session_start();
if(isset($_GET['page']) && file_exists('pages/'.$_GET['page'].'.php') {
include $_GET['page'];
}
?>
//www.mysite.com/index.php?page=fish will display /pages/fish.php with session access
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.