新手php学习者。我在一本书中读到,并继续在某些论坛和教程中看到这一点:语句:session_start()是访问所有全局会话变量所必需的。然而,stackoverflow提供的多个解决方案建议使用这种块:
if(!(_isset($_SESSION['user']))){
session_start()
}
能够访问会话变量。根据我的理解,会话变量$ _SESSION [' user']只能通过启动会话设置在以前的php文件中,而且只有"只有"调用session_start()语句后,当前页面可见。然而它产生了通知:
Notice: A session had already been started - ignoring session_start().
我错过了什么?
谢谢大家!
答案 0 :(得分:3)
您的第一个代码块应该是检查会话变量是否已设置,而不是会话中存在用户变量:
if(!isset($_SESSION)) {
session_start();
}
但是,如果您确保每页只有一个session_start(),那么您可以避免"会话已经启动"通知。
答案 1 :(得分:3)
session_start()是读取/设置任何会话变量所必需的。
通常,我认为您的代码应如下所示:
session_start()
if(!(_isset($_SESSION['user']))){
// do stuff here
}
但是,错误消息表示您已在文件的其他位置启动了会话。
答案 2 :(得分:1)
你可能在某处开启了auto_start(php.ini,.htaccess等)? http://www.php.net/manual/en/session.configuration.php#ini.session.auto-start
答案 3 :(得分:1)
以下是触发错误的方案:
的index.php:
<?php session_start();
require_once('some-page.php'); ?>
一些-page.php文件:
<?php session_start(); // this would make an error when included to index.nl ?>
some-page.php不应该有session-start,因为index.php已经启动了会话。
另请注意,转到其他页面甚至关闭标签页都不会重置会话变量!因此,如果您设置S_SESSION['user'] = 'someuser';
,则关闭标签并再次转到该网站,会话仍在那里,$ _SESSION [&#39; user&#39;]仍然会有一些用户作为价值!要手动破坏会话,请使用session_destroy();