PHP session_start()函数:为什么每次我使用与PHP会话相关的任何东西时都需要它

时间:2011-04-25 15:05:39

标签: php session logout

要从我的网站注销用户,我将页面重定向到logout.php我正在使用session_destroy()函数。即便如此,如果没有session_start()功能,注销功能也无法正常工作。通过在session_destroy()函数之前添加session_start()函数,我能够成功注销用户。

为什么我需要每次以及在每个与会话相关的页面中使用session_start()函数?

7 个答案:

答案 0 :(得分:12)

  

为什么我需要每次以及在每个与会话相关的页面中使用session_start()函数?

因此PHP知道要销毁哪个会话。 session_start()查看是否存在会话cookie或ID。只有这些信息才能摧毁它。

答案 1 :(得分:12)

session_destroy()会破坏活动会话。如果你没有初始化会话,就没有什么可以被销毁的。

答案 2 :(得分:3)

在默认配置中,PHP Sessions在硬盘上运行。当您需要此支持以避免不必要的磁盘IO时,PHP会要求您明确告诉它。

session_start()还告诉PHP查看用户的会话是否存在。

答案 3 :(得分:3)

  

session_start()创建会话或   基于a恢复当前的   通过GET或传递的会话标识符   POST请求,或通过cookie传递。

根据http://php.net/manual/en/function.session-start.php

基本上通过调用session_start(),PHP会读取标头并将会话ID交叉引用到系统上的内容(文件系统/数据库/等),然后可以填充相关的$_SESSION对那个特定的用户。这反过来允许您调用session_destroy(),因为它知道实际销毁的会话。

答案 4 :(得分:0)

将session_start()视为告诉php引擎的方式....你想要使用会话。

并且,据我所知,总是让它成为php页面中的第一行。

答案 5 :(得分:0)

我对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();一次,一切似乎都运行正常。

答案 6 :(得分:0)

您必须在希望会话工作的每个文件中调用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