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

このメソッドは、タグを含むブラウザーへの出力の前に「ヘッダー」を呼び出す場合にのみ機能します。したがって、「ヘッダー」を使用するのは最善の考えではないと思います。

SESSION 変数を失った場合は、入力内に必要な変数を含むフォームを作成する JavaScript を追加して、それを新しいページに送信してみてください。

このリダイレクトは 1 つのドメイン内ですか?

アップデート:

現在のページの 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

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

html タグの前にヘッダー リダイレクトを配置することをお勧めします。html タグの下にあることがわかった場合は、Web サイトの構造を再構築することをお勧めします。

于 2013-08-01T12:26:40.347 に答える
0

PHP では、header('Location:page_name.php') を使用します。

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