PHP会话变量未持久化

PHP会话变量未持久化,php,session,cookies,session-variables,session-cookies,Php,Session,Cookies,Session Variables,Session Cookies,我正在创建一个使用会话来存储登录详细信息的网站——我知道这是一个糟糕的安全做法,但这将在以后处理;现在我只需要解决这个问题。第1页从登录表单获取登录详细信息,并将其存储在会话中。第2页旨在显示这些变量,但我在尝试访问这些变量时出现以下错误: Notice: Undefined index: email in /customers/0/4/0/my-domain.com/httpd.www/upload-photo.php on line 10 Notice: Undefined index: p

我正在创建一个使用会话来存储登录详细信息的网站——我知道这是一个糟糕的安全做法,但这将在以后处理;现在我只需要解决这个问题。第1页从登录表单获取登录详细信息,并将其存储在会话中。第2页旨在显示这些变量,但我在尝试访问这些变量时出现以下错误:

Notice: Undefined index: email in /customers/0/4/0/my-domain.com/httpd.www/upload-photo.php on line 10
Notice: Undefined index: password in /customers/0/4/0/my-domain.com/httpd.www/upload-photo.php on line 11
以下是代码-我已经省略了不相关的部分: 第1页

第2页,我得到了上面提到的错误:

session_start();

ini_set('display_errors',1); 
error_reporting(E_ALL); 

var_dump($_SESSION);

$_SESSION["advert"] = $_GET['id'];
echo $_SESSION["email"];
echo $_SESSION["password"];
我已经搜索了SO,并确保在我的
会话_start()之前没有空格或其他内容
顺便说一句,如果它对我使用的域公司有帮助,那么在
if
中设置了One.com

$\u SESSION[“email”]
$\u SESSION[“password”]
,因此在跳过它的情况下,您会得到这个未定义的索引错误(因为之前没有定义具有此索引的元素)。要摆脱此
注意事项
,您可以使用
isset()
函数(还可以使用它验证
$\u POST
用户输入)。例如:

echo isset($_SESSION["email"]) ? $_SESSION["email"] : 'There is no element with key "email"';
请注意验证您的
POST
输入:

if(isset($_POST["email"]) && isset($_POST["password"])){}
将条件更改为:

if(isset($_POST['email']) && isset($_POST['password'])){
  //do login
}
else {
    echo " Plese enter email and password";
}
全文如下:

Login.php

<?php
//here must be totaly clear, nothing can't be here
session_start();

if(isset($_POST['email']) && isset($_POST['password'])){
   $_SESSION['email'] = $_POST['email'];
   $_SESSION['password'] = $_POST['password'];
}
else {
   echo "Please enter email and password";
}

//here must be form to login

我解决了这个问题。当我在一个页面上时,我在www.domain.com/page1上,但当我在另一个页面上时,没有www-domain.com/page2。这意味着会话变量没有持久化。如果URL中没有www,我需要编辑htaccess文件以重定向到www。

对不起,我该怎么做?下面的答案是什么?它不是做了与此相同的事情吗???@Coder101:下面的答案检查
POST
输入,如果跳过
,则作为
,对于
$\u SESSION['email']
,您仍然会收到此
通知。因此,您应该使用指定的索引
email
密码来验证
$\u SESSION
。好的,但我的问题不是收到此通知,我的问题是,我不知道为什么第1页的会话变量没有打印在第2页上。您的解决方案将删除通知,但变量仍然不会被打印…如果这有意义:)好吧,当然不会。现在您可以从简单的调试开始:在if之前转储
$\u POST
数组,并查看它是否包含必要的信息(我想它没有)。之后,您应该将错误追溯到表单提交或ajax调用,等等,直到找到
POST
没有向您发送任何内容的原因。
<?php
//here must be totaly clear, nothing can't be here
session_start();

if(isset($_POST['email']) && isset($_POST['password'])){
   $_SESSION['email'] = $_POST['email'];
   $_SESSION['password'] = $_POST['password'];
}
else {
   echo "Please enter email and password";
}

//here must be form to login
<?php
//here must be totaly clear, nothing can't be here
session_start();

if(!isset($_SESSION['email']) && !isset($_SESSION['password'])){
   header("Location: Login.php?err=Please login to use members area");
}
else {
   echo "You are logged in as:". $_SESSION['email'];
}