这个PHP条件语句是否过长?

时间:2013-09-06 10:27:29

标签: php if-statement session-cookies

我正在编写一本书来创建此功能以销毁会话:

function destroy_session_and_data()
{
session_start();
$_SESSION = array();
if (session_id() != "" || isset($_COOKIE[session_name()]))
    setcookie(session_name(), '', time() - 2592000, '/');
session_destroy();
}

我想知道条件陈述是否过长了?

不能改写如下:

if (session_id() != "" || isset(session_name()))

也就是说,session_name()不返回值'PHPSESSID'而不需要对$ _COOKIE数组的特定引用吗?

更进一步,有条件的不仅仅是这样写的:

if (session_id() != "")

看到session_id()返回$ _COOKIE数组中键[PHPSESSID]的VALUE,如果它不为空,那么肯定不会说会返回KEY [PHPSESSID]的session_name()将被设置,因为它们一起作为$ _COOKIE数组中的名称/值对存在?

为任何帮助干杯!

1 个答案:

答案 0 :(得分:0)

由于条件在session_start¹之后运行,isset($_COOKIE[session_name()])检查对我来说似乎是多余的。

会话ID可能为空并且isset检查同时为真的情况是什么?我唯一能想到的是当会话ID持久性没有用cookie实现时,但是仍然从客户端收到了一个带有会话名称的cookie。在这种情况下,清除cookie将不起作用,因为会话不使用cookie。

据我所知,你的确可以简化条件

if (session_id() != "")

¹如果代码在 session_start之前运行,那么isset将能够检测到稍后调用session_start时是否会继续会话,尽管此特定检查已简化,无法正确处理所有情况。此外,清除cookie作为响应不会改变当前请求的任何内容,因此虽然测试本身在理论上可能有用,但所提供的测试+响应代码毫无意义。