繁体   English   中英

PHP会话未启动登录表单

[英]PHP session not starting login form

我的用户登录名没有启动会话,因此用户无法登录。 在第2页中,我尝试了echo $_SESSION['email']; 查看会话变量是否正在传递而没有任何显示。

我仔细检查了phpmyadmin和数据库的格式,它的列是正确的,以及这些表格正在寻找的数据。

编辑:所有代码都在hs文件夹中。 session_start();之前没有空格session_start();

第1页:

    <?php
    session_start();
    include '../hs/connect.php';

$email = mysqli_real_escape_string($con, trim($_POST['email'])); 
$password = mysqli_real_escape_string($con, $_POST['password']);

 // echo $email  when i tested these variables they returned the correct values
 // echo $password

$sql="SELECT * FROM users WHERE email='$email' and password='$password'";
$result=mysqli_query($con,$sql);

$count=mysqli_num_rows($result);
if ($count==1){

$_SESSION['email'] = $email;

echo '<meta http-equiv="refresh" content="0;url=/hs/nextlogin.php">';
}
else{

echo '<meta http-equiv="refresh" content="0;url=/hs/hs.php">';
}
?>

上一个页面重定向到的页面(第2页):

<?php
session_start();
if (!isset($_SESSION['email'])) {


die("Please login <a href='../hs/hs.php'>here</a>");  //this keeps appearing even though I entered the correct login data
}

?>

解决方案

通过谷歌搜索“ ipage会话不起作用”,我发现了这一点: http ://www.ipage.com/knowledgebase/read_article.bml?kbid=600

要运行PHP会话,请在任何使用会话的PHP脚本的顶部包含以下代码:

session_save_path(“您的主目录路径” / cgi-bin / tmp); 在session_start();

要查找“您的主目录路径”:登录PHP脚本页面以获取您的主目录的实际路径。 用显示的路径替换“您的主目录路径”。 将session_save_path设置为cgi-bin中的目录:如上例中的/ cgi-bin / tmp或其他目录,只要绝对路径正确即可。

问题是在服务器上运行PHP的进程没有特权写入全局会话文件夹。 您应该遵循您的虚拟主机所提供的指导,如果那不能解决您的问题,我建议您在其支持系统中打开一个票。

较旧的建议,以供将来参考:

由于某种原因,$ _ SESSION在重定向后没有继续。 以下是可能出错的检查清单,但需要检查一些关键点:

  1. 检查您是否确实已重定向到“ nextlogin.php”,即。 $count确实是1 我知道这听起来很愚蠢,但有时会发生这些错误。
  2. 检查您的浏览器中是否启用了cookie。
  3. 尝试将重定向更改为header('Location: http://myhost.com/hs/nextlogin.php');
  4. 确保输出所有错误。 关于为什么未保存会话,可能有一些线索。

除了这些建议之外,我还需要更多信息来提出其他潜在解决方案。

编辑1:仅在这些页面上打开错误报告,将这两行添加到页面顶部,就在php open标签之后:

使用error_reporting(E_ALL);

ini_set('error_reporting',E_ALL);

编辑2:正如barmar在注释中指出的那样,请确保在<?php之前的文件中绝对没有任何内容,甚至没有空格。 会话处理本身也可能是一个问题。 您是否对php.ini中的会话处理进行了任何修改?

关于限制结果的想法,您可以使用此查询:

$sql="SELECT * FROM users WHERE email='$email' and password='$password' LIMIT 1";

关于重定向,您可以尝试使用此方法:

if ($count==1){

$_SESSION['email'] = $email;

  header('Location: "hs/nextlogin.php"';
}
else{
  header('Location: "hs/hs.php"';    
}

要正确调试,请尝试以下操作:

<?php
    session_start();

    error_reporting(E_ALL);

    ini_set('error_reporting', E_ALL);
    ini_set("display_errors","1");
    ini_set("register_globals", "Off");

    include '../hs/connect.php';

    //...
    //the  rest of code here.

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM