【问题标题】:html link with php header() redirection带有 php header() 重定向的 html 链接
【发布时间】:2013-08-02 01:33:15
【问题描述】:

当我使用“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() 函数。

【问题讨论】:

  • 使用标头重定向我没有任何问题。通过使用 html href 重定向,我丢失了所有 SESSION 变量。你的意思是我必须在 href 中调用 exit() ?
  • 我在每个页面上都使用 session_start
  • 好的,我用代码编辑了问题
  • header() 函数调用在哪里?
  • header('sourcepage.php') 在登录页面中,成功重定向到带有会话变量的 sourcepage.php

标签: php html redirect header


【解决方案1】:

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

如果您丢失了 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();没问题。

【讨论】:

  • 是的,它在同一个域内。我使用
  • 成功了!谢谢你!但我现在有一个奇怪的问题!请检查主要问题的更新
【解决方案2】:

header("位置:yourpage.php") 试试这个

【讨论】:

  • 我想在我的页面上有一个链接,所以当用户点击它时,使用 header() 重定向他
【解决方案3】:

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

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

【讨论】:

    【解决方案4】:

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

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

    【讨论】:

      猜你喜欢
      • 2021-12-26
      • 2021-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多