2016-11-23 3 views
0

私はログインページでウェブゲームを作成しています。これは、ゲームの「プロ」バージョンに変換したい場合、ユーザーをPaypalに連れて行きます。PHP - ペイパルリダイレクト後のセッションを失う

問題は、セッションがPaypalからpayment_successful.phpページに戻ってきているようです。セッション変数はすべて空です。

私はすべての適切なページにsession_start()行を付けることから始めました。セッションID(Chromeのコンソールから取得)は、セッションの開始時と同じで、payment_successful.phpに戻ります。したがって、これは一定しているように見えます。

いろいろなアイディアをいろいろ試した後、私は手動でセッションIDを追加しようとしました。

ログインページとPayment_successfulページ両方:

session_id('my_id'); 
session_start(); 

これは魔法のように動作し、完全に私のセッション変数のすべてを返します。しかし、私は固定セッションIDを持つことは非常に悪い考えだと思っています(申し訳ありませんが、私はこのことを忘れています)。

だから私は、それが単純に固定値の代わりに新しい値を取ることを期待して、私自身のセッションIDを作成するために、ログインページを変更:

ログインページ

add_seshid(); 
session_start(); 
// session_set_cookie_params (lifetime,'/','.mydomain.com',false); 

function add_seshid() { 
    $sesh_salt1 = "*s!$e"; 
    $sesh_salt2 = "$6#£"; 
    $sesh_date = date("mYhds"); 
    $sesh_pass = "lambchops".$sesh_date; 
    $sesh_token = hash('ripemd128',"$sesh_salt1$sesh_pass$sesh_salt2"); 
    session_id($sesh_token); 
} 

Payment_successfulページ:

session_id($sesh_token); 
session_start(); 

それが出力にセッションID(例えば。986a25f1d1fdabc62837def39b485c6)を行い、そして右のセッション全体にまたがるが、それはあまりにもすべてのセッションを返しません。変数。 session_set_cookie_paramsの行私自身のドメイン名を使って、ドメイン名の変更に問題があるかどうかを確認しましたが、これは何の違いもありませんでした。また、この記事の目的のために、誰かがかゆみでコメントしている場合に備えて、すべてのパスワード、塩類などが変更されています!!

誰かが私を正しい方向に向けることができます。

多くのありがとう、
ダン。

答えて

1

あなたのサイトのページであるhttp://sitea/landing.phpがあるとします。これは

session_start(); 

で始める必要がありますし、このページにアクセスするとき - あなたがお使いのブラウザで、開発者のツールバーを有効にした場合 - あなたはあなたのPHPSESSID

enter image description here

を見るべき今度はどこかへのリンクがあるとしましょうpaypal

あなたが購入を完了し、paypalからあなたの成功ページにリダイレクトされたら - あなたは同じPHPSESSIDを見ますか?彼はブラウザ?
あなたの成功のページには、あなたのセッションVARS編集1 $_SESSION['varname']

を介して利用可能であるべき後

session_start(); 

で始める必要があります。

あなたは2つのシンプルなVM上でテストしてみましたか?
2台のVMをスピンオフします。
あなたのウェブサイトを表すもの(SiteAと呼ぶ)と別のものがあなたのpaypalを表すもの(SiteBと呼ぼう)。 SiteAのオン
が、これはあなたのために働くかどうかを確認し

cat -n paypal.php 
1 <?php 
2 echo '<a href="http://192.168.0.42/display_session_data.php">Go back to game site</a>'; 
3 ?> 

単一のページを作成してサイトBには、次のテストコード

cat -n FormData.html 
1 <!DOCTYPE html> 
2 <html> 
3 <body> 
4 
5 <form action="session_start.php" method="post"> 
6 First name:<br> 
7 <input type="text" name="firstname" value="Mickey"> 
8 <br> 
9 Last name:<br> 
10 <input type="text" name="lastname" value="Mouse"> 
11 <br><br> 
12 <input type="submit" value="Submit"> 
13 </form> 
14 
15 <p>If you click the "Submit" button, the form-data will be sent to a page called "action_page.php".</p> 
16 
17 </body> 
18 </html> 

cat -n session_start.php 
1 <?php 
2 session_start(); 
3 echo "Hello World!<br>"; 
4 echo "Received First Name as " . $_POST['firstname'] . "<br>"; 
5 echo "Received Last Name as " . $_POST['lastname'] . "<br>"; 
6 $_SESSION['firstname']=$_POST['firstname']; 
7 $_SESSION['lastname']=$_POST['lastname']; 
8 echo '<a href="display_session_data.php">Display session data</a><br>'; 
9 echo '<a href="http://192.168.0.43/paypal.php">Go to paypal</a><br>'; 
10 ?> 
11 

cat -n display_session_data.php 
1 <?php 
2 session_start(); 
3 echo "First Name is $_SESSION[firstname] <br>"; 
4 echo "Last Name is $_SESSION[lastname] <br>"; 
5 ?> 

を作成します。そうすべき。
これがうまくいくなら - あなたのpaypalリンクでSiteBリンクを置き換えてください。
試験。
基本的に、検証可能な小さな手順を繰り返し実行し、期待どおりに動作することを確認してください。このようにして、何かが壊れた瞬間に、あなたが何を変えたのか、どこで問題を探すのかを正確に知っています。

+0

こんにちは、はい、最初から最後まで同じPHPSESSIDですが、その間にあるPaypalページを除いて、独自のIDを持っています。 session_idをsession_startの下に移動しましたが、空の戻り値との違いはありません。 Paypalへの私のリンクは:\tヘッダー( '場所:https://www.sandbox.paypal.com/cgi-bin/webscr'.$querystring); \t exit(); –

+0

paypal以外のものに対してあなたのコードをテストしようとしましたか?あなたのPHPページにいくつかの入力フィールドを提出する簡単なフォームを考えてみましょう。 PHPはセッションを開始し、$ _POSTから読み取るセッション変数を設定します。次に、あなたを他のサイトに導くサイトへのリンクをクリックします(別のip/fqdn)。この他のサイトでは、元のサイトの別のphpファイルにリンクを張ってセッションを開始し、単にセッション変数を表示します。私は前にpaypalサンドボックスで働いていました。 –

関連する問題