1

当我使用“a href ..”重定向到另一个页面时,我丢失了所有 SESSION 变量。所以我只想通过使用 header() php函数来重定向。我如何创建一个链接,当用户使用它时,它会使用 header() 将他重定向到另一个页面?谢谢

这是我的代码:源页面:

session_save_path("myrootdir/cgi-bin/tmp");
session_start();
....
$id = $_SESSION['id']; //session variable passed succesfully from log in page
$usr = $_SESSION['usr'];//by using header('sourcepage.php');
....
< a href='http://targetpage.php'>target< / a>

目标页面:

session_save_path("myrootdir/cgi-bin/tmp");
session_start();
...
if(isset($_SESSION['id']) && isset($_SESSION['usr'])) {
   echo "success";
}
else{
   echo "failed to pass";
}

我总是不及格!

更新

现在我有另一个奇怪的问题......

$_SESSION['id']=$_POST['id'];
$_SESSION['usr']=$_POST['usr'];

if(isset($_SESSION['id']) && isset($_SESSION['usr'])) {
    $id = $_SESSION['id'];
    $usr = $_SESSION['usr'];
    $qry = mysql_query("SELECT * FROM members WHERE id = '". mysql_real_escape_string( $id ) ."' AND usr = '". mysql_real_escape_string( $usr ) ."'");
    echo "Welcome ".$usr;
    echo "Session id".session_id();
    if(mysql_num_rows($qry) != 1) { Destroy(); }
  } else { Destroy(); }

当我检查是否有人像这样登录时,它在每个页面中都能完美运行,但是当我删除回显线时,它会调用 Destroy() 函数。

4

4 回答 4

1

header("Location: yourpage.php") 试试这个

于 2013-08-01T11:57:33.717 回答
1

仅当您在任何输出到浏览器(包括标签)之前调用“标题”时,此方法才有效。所以我认为使用“标题”不是最好的主意。

如果您丢失了 SESSION 变量,请尝试添加一些 JavaScript 来创建表单,其中包含您在输入中需要的变量,并将其提交到新页面。

此重定向是否在一个域内?

更新:

当前页面上的php代码:

echo '<input type="text" id="sessionID" style="display: none;" value="'.$_SESSION['id'].'">';
echo '<input type="text" id="sessionUri" style="display: none;" value="'.$_SESSION['usr'].'">';

JS代码:

< a onclick="sendSessionVars()">target< / a>

<script>
    function sendSessionVars(){
        var body=document.getElementsByTagName('body')[0];
        var sessionId=document.getElementById('sessionID').value;
        var sessionUri=document.getElementById('sessionUri').value;
        var form=document.createElement('form');
        form.setAttribute('method','post');
        form.setAttribute('style','display:none');
        form.setAttribute('action','targetpage.php');
        body.appendChild(form);
        var id=document.createElement('input');
        id.setAttribute('type','hidden');
        id.setAttribute('name','id');
        id.setAttribute('value',sessionId);
        var usr=document.createElement('input');
        usr.setAttribute('type','hidden');
        usr.setAttribute('name','usr');
        usr.setAttribute('value',sessionUri);
        form.appendChild(id);
        form.appendChild(usr);
        form.submit();  
    }
</script>

在 jQuery 上的代码会少得多,但它会运行得更慢。

和目标页面上的php代码:

$_SESSION['id']=$_POST['id'];
$_SESSION['usr']=$_POST['usr'];

您也可以将其发布到一些变量。这是非常简单的方法。

但是你不应该丢失 SESSION 变量。检查是你的 session_start(); 没关系。

于 2013-08-01T12:14:37.520 回答
0

在 php 中使用它 header('Location:page_name.php') 但我更喜欢使用 javascript 因为你可能会经常使用它的标题问题所以这是我的 javascript

       echo "<script>window.location='page.php'</script>";
于 2013-08-01T12:12:30.117 回答
0

利用header("Location:some.php")

并将标头重定向放在 html 标记之前是一个好习惯。如果您发现它位于 html 标记下方,您可能想要重建您的网站结构。

于 2013-08-01T12:26:40.347 回答