当我将“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()函数。
答案 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标记之下,则可能需要重建您的网站结构。