2010-11-11 185 views
1

所以我想创建一个登录脚本为我的网页使用PHP和MySQL。我一直在寻找关于这方面所有信息的良好教程的互联网,但它似乎大多数只是给一个脚本,并在这里说,你去。问题是我需要更多关于会话和cookie的信息。有没有人知道一个很好的地方了解这个东西?PHP登录问题

回答

1

老实说,我不知道你想要什么地方因为我自己学到了。因为真的很容易。

所有这一切的基本原则是验证输入的登录信息是否正确(如果您知道我在说什么,请通过您的BL和DA进行检查),然后将有关用户的任意信息存储在$ _SESSION变量像$_SESSION['name'] = 'guest',然后在每个页面的开始写一个简单的语句,需要登录来检查$ _SESSION数组的内容,如果没有设置,重定向到另一个页面等等...
这就是它! :D 希望我能回答你要找的东西! ; - ]

编辑: 下面是一个简单的登录页面:

<?php 
session_start(); //required if you want to use the $_SESSION array 
$username = $_REQUEST['txtUsername']; //storing the value of the "txtUsername" text box in the form sent by client after the form has been submited 
$password = $_REQUEST['txtPassword']; //same as $username 

if (isset($username) && isset($password)) 
{ 
    /* 
    * this section depends on the implementation of your BL and DA layers. 
    * assume that my BL selects a member by it's username and returns an array 
    * containing his/her info 
    */ 
    require_once('mybl.php'); //assume that my BL tier is implemented in the "mybl.php" file 
    MyBL $bl = new MyBL(); 
    $queryResult = $bl->selectByUsername($username); 

    //authenticating user 
    if ($queryResult['username'] == $username && $queryResult['password'] == $password) 
    { 
     //the user has been authenticated and can proceed to other pages available for members only 

     /* 
     * i'm storing the user's username in the session so that I could refer to it in other pages 
     * in case I want to update/modify database tables for this specific user. 
     */ 
     $_SESSION['username'] = $username; 
     //store anything else you want for the current user: 
     $_SESSION['name'] = $queryResult['name']; //for welcome prompt 

     header('Location: welcome.php'); //redirecting the user 
    } 
    else //in case of wrong username/password 
    { 
     $message = "Incorrect username/password"; 
    } 
} 
?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>LoginPage</title> 
</head> 

<body> 
<form method="post" action="login.php"> 
<table style="border: 1px dashed"> 
    <tr> 
     <td>Username:</td> 
     <td><input name="txtUsername" type="text" /> 
    </tr> 
    <tr> 
     <td>Password:</td> 
     <td><input name="txtPassword" type="password" /> 
    </tr> 
    <tr> 
     <td colspan="2" align="center"><input name="btnSubmit" type="submit" value="Login" /> 
    </tr> 
</table> 
</form> 
<span style="color: red;"><?php echo $message; ?> </span> 
</body> 
</html> 

欢迎页面

<?php 
session_start(); 
//checking to see if the user is logged in 
if (!isset($_SESSION['username'])) 
    header('Location: login.php'); //the user is not logged in, he/she is redirected to the login page. 

/* 
* Basically you might want to put this code at the beginning of every page that requires 
* logging in. This way a user that hasn't logged in can't see the contents of the page 
* and you don't have to worry about extra checking and conditions that could raise errors 
* due to empty "$_SESSION" array. 
*/ 
?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>Login successful</title> 
</head> 

<body> 
Login successfull!<br /> 
Welcome <?php echo $_SESSION['name']; ?> 
</body> 
</html> 
+0

这就是我想学的东西。你没有使用任何东西来帮助学习它? – shinjuo 2010-11-11 19:58:00

+0

只是由他人写的一些简单的代码。没有什么复杂的。如果你想 – M2X 2010-11-11 19:59:43

+0

这将是优秀的,也许你如何将它张贴在每个页面上的描述,我可以张贴的示例代码。我知道如何使用MySql并填充它的会话和登录我不确定 – shinjuo 2010-11-11 20:03:43

1

关于会话和cookie,你到底在寻找什么?

请确保您使用http://php.net/manual/en/index.php

但是,如果你提供更多的信息,我们可以帮助一点,你在一个更好的方向

编辑: 这看起来像你需要的所有功能相当全面的教程: http://www.evolt.org/node/60265

+0

我只是想创建一个登录 – shinjuo 2010-11-11 19:54:54

+0

好,请看我上面的编辑。 – Bill 2010-11-11 19:56:11

1

这里有一些参考资料,可以帮助:

+0

会话和东西是创建登录页面的好方法吗? – shinjuo 2010-11-11 19:55:23

+0

会话是跟踪用户身份验证状态的好方法,是的。 PHP本身将处理设置会话跟踪cookie。你只是看起来是一个本地数组,你可以转储和获取你需要跟踪的任何东西。请注意,此数据不会**发送到客户端,因此将密码等信息存储在会话数组中是相当安全的。你不应该在cookies中存储这样的敏感信息。 – cdhowie 2010-11-11 19:58:30

1

了解数据库操作有关PDO。这不仅适用于登录脚本,还适用于PHP。它将会帮助您编写安全的程序。

+0

好吧,我会把它放在我的任务清单 – shinjuo 2010-11-11 20:04:40

1

我认为你遇到的问题是一个安全的登录脚本发挥了MySQL和PHP的许多功能,这不仅仅是很多教程想要涉及的。

有一个很好的教程here,但它的成立,因此显示了如何构建登录程序都在PHP4和PHP5,所以观看数字化的标题,并确保您只使用适用的文件到您的版本PHP。请务必查看有关加密密码的部分。现在,你一定会做得更好。关于本教程的好处是,它包括每一步的意见,这样你就会知道他们在做什么,如果你需要它可以搜索更多信息。如果您需要关于特定部分的解释,您可以做的另一件事是在这里发布一部分脚本。

2

你必须明白,每一次使用在session_start();功能,您在您的服务器上创建一个新的会话,或者如果它已经创建它使一个参考,因此通过浏览器在这种识别每一位旅客,并在同一时间,你创建这个会话的服务器设置在报头中的cookie变量与变数称为PHPSESSID这个变量有一个与你的会话的ID散列。

在PHP中,您有一个名为$ _SESSION的预定义全局变量,这个变量可以用来为您的登录存储数据,例如标志,就像这样。

$ _SESSION ['login'] = true;

所以你可以使用这个变量来检查用户是否已经登录过,每次你需要显示一些只允许注册用户的东西。

+0

我忘了告诉你,session_destroy();函数应该用它来注销,它会结束你的会话。 – alejandro 2010-11-11 20:18:54