2016-11-08 3 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 пустыми, обновление действительно обычно пуст почтовыми переменными (некоторые спрашивают вас, хотите ли вы повторно отправить). Это не хороший дизайн, но для вашей цели вы можете попробовать проверить (! Empty ($ _ POST [...]) $ userid = $ _SESSION ['userid'] = $ _POST ['userid']; – Najzero

+0

@RiggsFolly no , Я отправляю данные с одного сайта, а затем превращаю данные POST в сеанс с начальным сеансом –

ответ

1

Это потому, что вы всегда переписывая данные сессии с данными POST, даже если нет ничего в поле $_POST['userid'].

Я вижу, что вы очень новичок в программировании (PHP), и поэтому я бы рекомендовал вам сесть и немного подумать о том, что вы хотите сделать. Затем попробуйте записать краткие списки элементов шагов, необходимых для выполнения этих действий. Не забывайте быть действительно конкретным, так как это то, что вам нужно, когда пишете код. Это называется псевдокодом и является важным инструментом в программировании.
После того, как вы это сделали, прочитайте код, который вы написали, и действительно прочитайте, что он делает. Не то, что вы ожидаете. Затем вы узнаете многое о том, как работает программирование. ;)

Короткий пример, основанный на коде вы публикуемую:

  • начала сессии.
  • Если пользователь отправил ID -> Сохранить ID в сеансе
  • Если сеанс содержит идентификатор пользователя -> Показать подтверждение входа.
    : Else -> Показать Войти Форма

Ваш код, в "английском" форме.

// 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-адреса. Либо относительный, либо динамически созданный полный. Таким образом, вы всегда имеете полный контроль, когда пользователь заканчивает работу при нажатии на ваши ссылки. :)

Редактировать, Added # 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'; 
} 

Посмотрите, как комментарии, и код, выравнивает Withe псевдо-код из списка пули? И как он описывает именно то, что вы хотите, подробно? ;)

+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

если моя страница перезагружена кнопкой, как я могу сохранить текущую сессию –