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

问题描述 投票:10回答:8

为了从我的网站注销用户,我将页面重定向到使用session_destroy()函数的logout.php。即使在这里,没有session_start()功能也无法使用注销功能。通过在session_destroy()函数之前添加session_start()函数,我可以成功注销用户。

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

php session logout
8个回答
12
投票

session_destroy()破坏活动的会话。如果您未初始化会话,则将没有任何破坏。


12
投票

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

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


3
投票

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

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


3
投票

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

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

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


0
投票

考虑session_start()作为告诉php引擎的方法。...您要使用会话。

而且,据我所知,始终使它成为php页面中的第一行。


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();,似乎一切正常。


0
投票

您必须在要运行会话的每个文件中调用一次(仅一次)session_start。


0
投票

与其他语言相比,它的语气相当低落,所有其他语言都启动一次会话,然后您添加,更改会话数据并关闭会话。

© www.soinside.com 2019 - 2024. All rights reserved.