簡體   English   中英

PHP session_start() 函數:為什么每次使用與 PHP 會話相關的任何東西時都需要它

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM