2016-11-08 107 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

如果我的页面用按钮重新加载,我怎么能保持当前会话 –