Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP会话:请解释一下?_Php_Session_Login - Fatal编程技术网

PHP会话:请解释一下?

PHP会话:请解释一下?,php,session,login,Php,Session,Login,我学习PHP已经有一段时间了,大部分时间都很容易。我唯一挂断的事情就是让会议开始工作。谷歌在这方面的努力是不可原谅的 这可能是两个原因之一;语法或我的软件。我目前正在一台未连接到internet的机器上使用EasyHP 5.3.5.0构建一个本地网站。将其连接到internet不是一个选项 我目前对会话的了解是,许多与会话相关的语法已被弃用,取而代之的是超级全局$\u会话数组,它更易于使用。启动会话;必须在与会话相关的任何语法之前。但是,我的登录脚本没有建立会话,很快!isset$\u会话['u

我学习PHP已经有一段时间了,大部分时间都很容易。我唯一挂断的事情就是让会议开始工作。谷歌在这方面的努力是不可原谅的

这可能是两个原因之一;语法或我的软件。我目前正在一台未连接到internet的机器上使用EasyHP 5.3.5.0构建一个本地网站。将其连接到internet不是一个选项

我目前对会话的了解是,许多与会话相关的语法已被弃用,取而代之的是超级全局$\u会话数组,它更易于使用。启动会话;必须在与会话相关的任何语法之前。但是,我的登录脚本没有建立会话,很快!isset$\u会话['username']始终返回true

我的脚本设置如下:

PHP包含到login.PHP,这是一个表单。check_login.php是验证它的工具,如果查询返回一行,它将重定向到login_success.php,它将建立会话,发出欢迎消息,然后使用JavaScript重定向到主页

有什么想法吗

编辑以包含更多信息:

以下是我的代码摘要:

index.php: main_login.php: checklogin.php: 登录_success.php: 登录过程一直到这里,重定向到主页,这就是问题所在

session_start(); var_dump($_SESSION); //This works if(!isset ($_SESSION['username'])){ header("location:index.php"); } Javascript redirect, and a welcome message appears.
在您进入主页之前,一切都会正常工作,其中应设置$u SESSION['username',并且它不应显示表单,但它会显示表单。

您必须尽早调用SESSION\u start,而且在使用$u SESSION之前,它肯定是空的。

您必须尽早调用SESSION\u start,在使用$\u SESSION之前,它肯定是空的。

看起来您没有在main\u login.php中使用etranger提到的SESSION\u start。您需要在每个新请求开始时调用该函数以开始使用会话

否则,如果您正在调用session_start,而只是忽略了在代码示例中显示它,那么可能会话ID在重定向过程中丢失了。您是使用基于cookie的会话还是将会话ID作为URL参数传递?请尝试在每页顶部打印会话id或SID。这将让您知道会话丢失时会话ID将更改或丢失


如果您使用的是基于cookie的会话,那么cookie可能由于某种原因丢失了。如果您使用URL参数传递会话ID,则可能透明会话ID支持不正常。

看起来您没有在main\u login.php中使用etranger所提到的会话启动。您需要在每个新请求开始时调用该函数以开始使用会话

否则,如果您正在调用session_start,而只是忽略了在代码示例中显示它,那么可能会话ID在重定向过程中丢失了。您是使用基于cookie的会话还是将会话ID作为URL参数传递?请尝试在每页顶部打印会话id或SID。这将让您知道会话丢失时会话ID将更改或丢失


如果您使用的是基于cookie的会话,那么cookie可能由于某种原因丢失了。如果您使用URL参数传递会话ID,则可能透明会话ID支持不正常。

是否确实设置了$\u session['username']?您的登录代码是什么样子的,您是如何确保登录成功的?还要检查session.save_path:-确保设置正确,并检查是否正在创建文件及其内容。如何阻止用户直接登录_success.php并跳过用户名/密码部分?login_success.php如何知道应该登录哪个用户?session.save_的默认路径是/tmp文件夹。我使用了Smejko的var_dump,在会话启动后,它显示用户名和密码确实在$_会话中。但是,当它重定向到index.php(main_login.php include所在的位置)时,它仍然显示登录表单。在main_login.php中,我有if!isset$_会话['username']{…表单…}其他{…用户信息…}。多亏了斯梅伊科的高超技术@Tim,login_success.php有一个if!isset$\u会话['username']{…PHP重定向到index.PHP…}其他{…欢迎屏幕…}您是否在会话开始后尝试var\u dump$\u会话以检查是否有任何会话数据?您确定已设置$\u会话['username']?您的登录代码是什么样子的,您是如何确保登录成功的?还要检查session.save_path:-确保设置正确,并检查是否正在创建文件及其内容。如何阻止用户直接登录_success.php并跳过用户名/密码部分?login_success.php如何知道应该登录哪个用户?session.save_的默认路径是/tmp文件夹。我用了斯梅伊科的var_dum
p、 会话启动后,它显示用户名和密码确实在$\u会话中。但是,当它重定向到index.php(main_login.php include所在的位置)时,它仍然显示登录表单。在main_login.php中,我有if!isset$_会话['username']{…表单…}其他{…用户信息…}。多亏了斯梅伊科的高超技术@Tim,login_success.php有一个if!isset$_会话['username']{…PHP重定向到index.PHP…}其他{…欢迎屏幕…}您是否尝试过在会话开始后调用var\u dump$会话来检查是否有任何会话数据?但是,当我在会话开始后立即调用var\u dump时,它会显示在check\u login.php上插入的用户名和密码变量。这不是您期望的结果吗?但是当我在会话开始后调用var\u dump时,它会显示在check_login.php上插入的用户名和密码变量。这不是您所期望的吗? if(!isset ($_SESSION['username'])){ ... Login form, action="cehcklogin.php" method="post" ... }else{ var_dump ($_SESSION): // Just to see if it works } Connect to SQL $username = $_POST['username']; $password = $_POST['password']; $username / $password stripslashes / mysql_real_escape_string Query to find the username & password $count = mysql_num_rows($result); if($count = 1){ $_SESSION["username"] = $username; $_SESSION["password"] = $password; header("location:login_success.php"); }else{ echo "Wrong Username or Password." } session_start(); var_dump($_SESSION); //This works if(!isset ($_SESSION['username'])){ header("location:index.php"); } Javascript redirect, and a welcome message appears.