html链接与php header()重定向

时间:2013-08-01 11:51:13

标签: php html redirect header

当我将“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 个答案:

答案 0 :(得分:1)

标题(“位置:yourpage.php”) 试试这个

答案 1 :(得分:1)

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

如果您丢失了SESSION变量,请尝试添加一些JavaScript,这些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();没关系。

答案 2 :(得分:0)

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

       echo "<script>window.location='page.php'</script>";

答案 3 :(得分:0)

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

并在html标记之前放置标题重定向是一种很好的做法。如果您发现它位于html标记之下,则可能需要重建您的网站结构。