1

我从 stackoverflow 学到了很多东西。我遇到了一个奇怪的问题,就是这样。

我有代码检查会话是否已经开始,如果没有,我开始会话。那里没问题

这是我的代码

If (session-id = "")
{Session_start();
/* setting session ids */
}

我有一个包含文件,可以将表单提交到同一个脚本(上面的脚本)

但是当通过 post 方法返回页面时,会话又开始了,就好像会话停止了一样。

编辑

如果 (session_id == "")

错误有一个错字。

我最初遇到的问题是,在第一次初始化时,我设置了会话数组

/* If statement */
$_Session['test'] = ['1','2','3','4','5'];
/* end of if statement */

当用户向同一个脚本提交数据时,会话数组将为空,报错。我解决它的方法是将 session_start 放在脚本的顶部,而不是放在 if 语句上。这似乎解决了问题,感谢您的所有投入。

4

3 回答 3

4

我想你想要这个

if(session_id() == '') {
     Session_start();
    /* setting session ids */
}

session_id()返回当前会话的会话 ID,如果没有当前会话(不存在当前会话 ID),则返回空字符串 ("")。


你也打电话 session_start()不止一个,因为没有问题

session_start()- 开始新的或恢复现有的会话


在php版本中>=5.4.0你也可以使用session_status()

session_status()用于返回当前会话状态。


已编辑

好吧,在某些情况下,两次启动会话似乎是个问题

我引用 DaveRandom的评论

如果会话已经开始。你不能重新开始。你不能恢复没有停止的东西。这将阻止消息出现,但我不明白你为什么要首先打电话session_start()。另请注意,session_write_close()这不会破坏本地 $_SESSION 变量,因此请确保在关闭会话后不要尝试写入它。

所以你可以这样做

<?php

  var_dump(isset($_SESSION));
  session_start();
  var_dump(isset($_SESSION));
  session_write_close();
  var_dump(isset($_SESSION));
  session_start();

键盘

于 2013-01-22T08:45:30.963 回答
1

检查是否$_SESSION设置。

isset($_SESSION) or session_start();

http://codepad.viper-7.com/I3i9lv

于 2013-01-22T08:46:01.283 回答
0

您需要在每个页面的顶部开始会话,以保持会话。这不会清除正在运行的会话,因此您可以删除它启动的条件。

于 2013-01-22T08:43:08.077 回答