2016-11-08 112 views
1

我從一個站點發布數據到另一個站點,然後將發佈的數據轉換爲會話。從其他網站丟失頁面上的數據刷新php會話

形式

<form action="https://www.122.co.uk/11/" method="POST"> 
<input type="hidden" name="userid" value="1010101"> 
<input type="submit" value="Go" style="font-size:14px; padding:20px;"> 

我那麼這個數據發佈到我的新網站,我把它變成一個變量$userid

然後檢查該變量爲空或不,如果不顯示一些代碼。

檢查參數不爲空

if (!empty($userid)) { 
    ?> 
    <div class="container"> 
     <?php 
     echo "<hr>"; 
     echo "You Are Logged In,</br>"; 
     echo "Your User ID is <strong>" . $_POST['userid'] . "</strong>."; 

當我刷新一個按鈕的頁面點擊我鬆散的會話數據,所以在檢查代碼劑量不會顯示。

如何讓頁面刷新並保持會話數據?

按鈕刷新

<button class="btn btn-primary hidebutton showbuttonv2" role="button" id="homebutton" onClick="history.go(0)">Home</button> 

的完整代碼尖晶石

<?php 

session_start(); 

$_SESSION['userid'] = $_POST['userid']; 

$userid = $_SESSION['userid'] = $_POST['userid']; 

//$_SESSION["userID"] = $userid; 

if (!empty($userid)) { 
    ?> 
    <div class="container"> 
     <?php 
     echo "<hr>"; 
     echo "You Are Logged In,</br>"; 
     echo "Your User ID is <strong>" . $_POST['userid'] . "</strong>."; 
+0

該會話是特定網站!你的意思是從站點1看不到你在站點2上創建的會話? – RiggsFolly

+0

你不檢查你的$ _POST變量是否爲空,刷新通常會清空post變量(有些人問你是否希望重新發送)。這不是好的設計,但爲了你的目的,你可以嘗試檢查是否(!empty($ _ POST [...])$ userid = $ _SESSION ['userid'] = $ _POST ['userid']; – Najzero

+0

@RiggsFolly no ,我從一個站點發送數據,然後將POST數據轉化爲會話,開始會話 –

回答

1

這是因爲你總是覆蓋與POST數據的會話數據,即使沒有$_POST['userid']字段中的任何內容。

我看到你對編程(PHP)非常陌生,因此我建議你坐下來思考一下你想做什麼。然後嘗試寫下做這些事情所需步驟的短項目清單。請記住確實是,因爲這是編寫代碼時需要的。這被稱爲僞代碼,並且是編程中的重要工具。
一旦你完成了,閱讀你寫的代碼,並真正閱讀它的功能。不僅僅是你期望的。然後你會學到很多關於編程如何工作的知識。 ;)

短的例子,根據你發佈的代碼:

  • 啓動會議。
  • 如果用戶提交了ID - >會話中的商店ID
  • 如果會話包含用戶ID - >顯示登錄確認。
    :否 - >顯示登錄表格

您的代碼爲「英文」形式。

// Start the session 
session_start(); 

// Save the POSTed value from the form in the session array. 
$_SESSION['userid'] = $_POST['userid']; 

// Save the POSTed value fromthe form in the session array, and a variable of its own. 
$userid = $_SESSION['userid'] = $_POST['userid']; 


// If we have a (non-empty) value in the user ID variable. 
if (!empty ($userid)) { 
    // Show the login confirmation. 
} 

正如您所見,您的預期行爲與您編寫的代碼之間存在差異。 :)

請記住:詳細信息總是事情在編程。

此外,使用JavaScript的history創建麪包屑並不是最佳選擇。這會導致用戶有些不可預知的行爲,特別是當他們從網絡搜索到達您的頁面時。 (它會再次將它們帶到搜索引擎,而不是您的主頁。)
這就是爲什麼我建議使用正確的URL代替。要麼是相對的,要麼是動態創建的完整的。這樣,當你點擊你的鏈接時,你總是可以完全控制用戶的最終位置。 :)

編輯,添加#2: 下面是我如何編寫代碼,執行由僞代碼概述的任務。

// Using sessions to persist data across page views. 
session_start(); 

// Check if user has tried to log in. 
if ($user = login_user ($username, $password)) { 
    // He has. Use session to keep him logged in. 
    $_SESSION['user'] = $user; 
} 

// If the user is logged in, show confirmation message. 
if (!empty ($_SESSION['user']['id'])) { 
    $page = 'login_confirmed'; 
} else { 
    $page = 'login_form'; 
} 

看看評論和代碼如何與來自項目符號列表的僞代碼對齊?以及它如何詳細描述你想要的內容? ;)

+0

嗨,感謝您提供有見地的信息,主要問題是當我刷新頁面時,爲什麼我放鬆會話變量? –

+0

好乾淨的代碼與良好的評論,但是當我點擊我的按鈕我鬆動變量值 –

+0

@BenjaminOats我沒有改變你的代碼,我只是評論它到底是什麼。作爲學習經驗,我已經把它留給了你,以找出爲什麼以及如何解決它。有關錯誤的一個重要提示是,項目符號清單中使用的確切措詞與評論中使用的措辭之間存在差異。這是所有新老程序員必須克服和理解的障礙,這就是爲什麼我沒有爲你改變它。 ;)我會添加一個如何做的例子。 – ChristianF

0

如果最後一個爲空,您可能不希望將$_SESSION['userid']設置爲$_POST['userid']的值。

<?php 

    session_start(); 

    // check that $_POST['userid'] is set 
    if (isset($_POST['userid'])) { 
     $_SESSION['userid'] = $_POST['userid']; 
     $userid = $_SESSION['userid']; 
    } 

    if (!empty($userid)) { 
?> 
+1

你的編輯是正確的,但我認爲如果你清理了不必要的代碼,答案會好得多。 – ChristianF

+0

感謝您的建議,我縮短了一段代碼片段。 –

+0

如果我的頁面用按鈕重新加載,我怎麼能保持當前會話 –