2012-04-01 58 views
1

我想创建为3 PHP页面之间一个非常简单的会话:的index.php,validate.php和target.php 的index.php问题用PHP会议

<?php 
session_start(); 
$_SESSION['uid'] = 'test'; 
?> 
<!DOCTYPE HTML> 
<html> 
<head> 
<title>Start A Session</title> 
</head> 
<body> 
<h1>Welcome to Heaven</h1> 
<form method="POST" action="validate.php"> 
Your Name: <input type="text" name="name" value="" /> 
<input type="submit" value="Submit" /> 
</form> 
</body> 
</html> 

和validate.php为:

<?php 
session_start(); 
$err="Not Allowed"; 
if(($_POST['name']) == $_SESSION['uid']){ 
header ("Location: heaven.php");} 
else 
{echo $err; } 
?> 

最后target.php作为

<?php 
session_start(); 
?> 
<!DOCTYPE HTML> 
<html> 
<head> 
<title>Start Email with PHP</title> 
</head> 
<body> 
<h1>Welcome to Targer <?php echo $_SESSION['uid'] ?></h1> 
<img src="session.jpg"> 
</body> 
</html> 

现在我的问题是:

  1. 如何让用户仍然可以访问目标页面,而我已经设置了页面之间的会话(根据我对会话的理解,目标页面必须是不可访问的,除非提交正确的seesion值但我可以获得通过单击wamp索引列表中的页面链接访问页面!与$ err相呼应; ! )
  2. 我试图通过使用isset()来验证$ _SESSION值,但它没有经过!你可以让我知道如何使用isset()而不是if(($ _ POST ['name'])== $ _SESSION ['uid'])comarison来修改validate.php吗?
  3. 你可以让我知道我可以如何合并两个(index.php和validate.php)在一个页面?我的意思是我如何验证index.php中的会话并减少文件两个索引和目标?在这种情况下,我需要处理索引页面内的错误登录。
  4. 最后,您可以让我知道如何从用户输入中将值赋给$ _SESSION吗?我的意思不是像$ _SESSION ['uid'] ='test'这样的硬编码部分;让会话值从用户输入开始!我知道这看起来毫无意义在这里,但我想获得提前在同一索引页创建的验证码

感谢您的时间观念

回答

0

1)你通过分配正确的会话值是什么意思? “heaven.php”是任何人都可以访问的文件,如果您不检查该文件的访问权限。

2)不确定你的意思。如果你需要检查两个变量是否存在并匹配,你需要类似if ((isset($_POST['name']) && isset($_SESSION['uid'])) && (($_POST['name']) == $_SESSION['uid']))

3)如果不需要将文件减少到minumun,最好在各自的文件中保持验证,表单处理等功能。如果你想在“index.php”中使用会话和表单值,你可以通过首先检查值是否存在,然后对他们做任何你喜欢的事情来做到这一点。 (与上述2相同)

4)您可以使用表单为变量分配用户输入的值。这就是你目前对你的表格所做的。在您处理文件/功能时,您可以执行类似操作:

if(isset($_POST['submit']){ 
    $_SESSION['uid'] == $_POST['name']; 
} 

上面的示例非常简化。

最后。你没有真正验证任何东西,你只需检查两个值是否匹配。验证意味着您确保值符合指定的标准,例如,用户提交的值应该是整数(当插入到数据库中或以其他方式使用时)是整数。我认为在创建生产环境中的任何内容之前,您应该先看看一些关于表单处理和用户输入验证的教程。

0

这应该正常工作,并与2个文件。你甚至可以将它压缩到1个文件,如果你真的想这么做(这很难理解),请求它,我可以做到。

的index.php:

<?php 
session_start(); 
$_SESSION['uid'] = 'test'; 
?> 
<!DOCTYPE HTML> 
<html> 
    <head> 
    <title>Start A Session</title> 
    </head> 
    <body> 
    <h1>Welcome to Heaven</h1> 
    <form method="POST" action="heaven.php"> 
     Your Name: <input type="text" name="name" value="" /> 
     <input type="submit" value="Submit" /> 
    </form> 
    </body> 
</html> 

而其他文件,heaven.php

<?php 
session_start(); 
if (!empty($_SESSION['uid'])&&$_POST['name']==$_SESSION['uid']) 
    { 
    ?> 
    <!DOCTYPE HTML> 
    <html> 
    <head> 
    <title>Start Email with PHP</title> 
    </head> 
    <body> 
    <h1>Welcome to Targer <?php echo $_SESSION['uid'] ?></h1> 
    <img src="session.jpg"> 
    </body> 
    </html> 
    <?php 
    } 
else 
    { 
    ?> 
    <!DOCTYPE HTML> 
    <html> 
    <head> 
    <title>Access denied</title> 
    </head> 
    <body> 
    Sorry, you have no permission to access this page. 
    </body> 
    </html> 
    <?php 
    } 
?> 

'确认' 只是如果字符串匹配以显示所需的信息或显示“你不能看到这个页面',如果他们不匹配。

!empty()需要设置。除此之外,想象一下,如果有人访问'heaven.php'页面而不先去index.php会发生什么。你会比较2个空字符串!所以它会被验证。另一种方法是将$ _SESSION ['uid'] ='test';也在heaven.php的开头。

我真的不回答你的问题,以便(和在2个一个我骗了,因为我把第2和第3共同文件,而不是第1次和第2次),但我的代码应该涵盖所有的问题。最后一部分,它只是$ _SESSION ['uid'] = $ _ POST ['name']; ,但在验证用户的时候这样做是没有意义的。验证必须来自某个地方,通常来自mysql数据库。

如果有效(下/上/下按钮),请开始接受您的问题的答案。