0

在过去的 3 个小时里,我一直被困在一个问题上,这让我对 PHP 会话感到很困惑。Iv 从 session_is_registered 转到 $_SESSION 并且它不想工作。

请参阅下面的代码(在我想通过登录保护的页面的最顶部的所有文件中):

    <?php

     session_start();

     if(!isset($_SESSION['user']))
         header("location: login.php");

    ?>

在另一个页面 access.php 上,我有一个带有两个输入框和提交按钮的表单来检查输入并与 db 交叉引用它。当输入不正确的值时,我收到消息“无效登录”,这是正确的。但是当我输入正确的详细信息时,我会回到 login.php 页面,要求登录。

我正在保存会话并检查详细信息,如下所示:

    <?php
    session_start();
    include("dbfile.php");

    $sql = mysql_query("SELECT id FROM myTable WHERE user=$username AND pass=$pass");

    if(mysql_num_rows($sql)==1){

             $_SESSION['user'] = "Test";
             header("location: account.php");
    }else{

             header("location: login.php");      
    }
     ?>

不幸的是,我在一个已关闭 register_globals 的共享服务器上,但不确定这是否是问题所在。如果我在其他页面上回显会话的输出,我什么也得不到。就像它甚至没有注册/保存会话一样。

我在浏览器上启用了 cookie/js。事实上,我已经在 4 个浏览器上进行了测试,但结果相同。谁会是这个的救生员..

4

4 回答 4

0

如果您遇到问题,例如您的 php 会话无法在您网站的所有页面上运行,请不要担心,如果您的问题与我以前在我的网站中遇到的问题相匹配,那么您可以轻松解决您的问题并且我解决了。

因此,假设在您的登录页面中,您以 ...

session_start();
$_SESSION['islogin'] = 'true';

但是您的“islogin”会话不适用于除少数页面之外的所有页面。比您的网址可能有问题。请检查您的网址中是否有“www”。如果不是,请在您的网址中添加“www”,然后重试。如果您想使用 htaccess 文件在您的网址中添加“www”,请尝试以下操作。

RewriteEngine On
RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+$
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [L,R=301]

在 .htaccess 文件中添加这三行代码。

可能是这种变化解决了你的问题。

于 2014-02-21T07:19:37.173 回答
0

尝试这个

$sql = mysql_query("SELECT id FROM myTable WHERE user='$username' AND pass='$pass'");

if(mysql_affected_rows()>0){

         $_SESSION['user'] = "Test";
         header("location: account.php");
}else{
         // die(mysql_error()); use this if you think maybe there is an error
         header("location: login.php");      
}
于 2012-05-11T18:29:59.900 回答
0

试试这个当你在查询中使用invariable并且数据类型是整数时,你必须写“.$variable_name”。如果变量是数据类型是 varchar,那么你必须写成“'.$varable_name.'”

<?php
    session_start();
    include("dbfile.php");

    $sql = mysql_query("SELECT id FROM myTable WHERE user="'.$username.'" AND pass="'.$pass.'" ");

    if(mysql_num_rows($sql)==1){

             $_SESSION['user'] = "Test";
             header("location: account.php");
    }else{

             header("location: login.php");      
    }
     ?>
于 2012-05-11T18:18:25.563 回答
0

尝试在您的查询中$_POST['username'],如果关闭$POST['pass'],变量$username$pass不存在。register_globals(他们应该是。)

如果您想查看会话是否正常工作,请尝试以下操作:

<?php
    session_start();
    var_dump($_SESSION);
    $_SESSION['works'] = 'yes';
?>

在第二个页面视图中,您应该在屏幕上获得结果。:)

于 2012-05-11T18:09:26.627 回答