在用戶登錄時有很多種有我實例一樣的最基本的用戶登錄跑到指定頁面這個不安全如果用戶知道你這個地址就不需要登錄了,實例二利用了session也是較常用的在操作頁面加了session驗證,但是無法記住下次登錄,實例三就利用了session和cookie同時登錄並可以自動記錄下次自動登錄功能。
我們先來看個最簡單的實例
以下附簡單的login.htm內容
代碼如下 復制代碼<html>
<body>
<form name="login" action="login.php" method=post>
用戶名<input type=text name="name">
<p>密碼<input type=password name="password">
<p>
<input name="log" type=submit value="登錄">
</form>
</body>
</html>
login.php內容如下:
代碼如下 復制代碼<?
error_reporting(0);
$mysql_servername = "localhost"; //主機地址
$mysql_username = "root"; //數據庫用戶名
$mysql_password =""; //數據庫密碼
$mysql_database ="peng"; //數據庫
mysql_connect($mysql_servername , $mysql_username , $mysql_password);
mysql_select_db($mysql_database);
$name=$_POST['name'];
$passowrd=$_POST['password'];
if ($name && $passowrd){
$sql = "SELECT * FROM liuyanban WHERE name = '$name' and password='$passowrd'";
$res = mysql_query($sql);
$rows=mysql_num_rows($res);
if($rows){
header("refresh:0;url=a.htm");//跳轉頁面,注意路徑
exit;
}
echo "<script language=javascript>alert('用戶名密碼錯誤');history.back();</script>";
}else {
echo "<script language=javascript>alert('用戶名密碼不能為空');history.back();</script>";
}
?>
下面還有一個我剛學php 是寫的
這是一個登錄頁面的效果圖,其它登陸別名與密碼
代碼如下 復制代碼<input name="myname" type="text" id="myname" style="border:solid 0px;" />
<input name="mypass" type="password" id="mypass" style="border:solid 0px;" />
php代碼
代碼如下 復制代碼<?
session_start();//這個一定要申明喽,給個小提示:在session之前不能有任何輸出哦,在php.5以下的版本會有問題.
$myname =get_value('myname',post);
$mypass =get_value('mypass',post);
if(!preg_match("/^w+$/",$myname) || strlen($myname)<3 || strlen($myname)>15 ){
alert('輸入的用戶名信息有誤!用戶名必須由數字下劃線英語字母組成,長度為3-15個字符!','');
}
if(!preg_match("/^w+$/",$mypass) || strlen($mypass)<6 || strlen($mypass)>15 ){
alert('輸和的用戶密碼!密碼必須由數字下劃線英語字母組成,長度為6-15個字符!','');
}
$sql ="select * from tbn where admin_name='$myname' and admin_pwd='".md5($mypass)."'";
$result =mysql_query($sql);
if(mysql_num_rows($result) ){
$my =mysql_fetch_array($result);
$_SESSION['uid']=$myname;
//$_SESSION['auth']=return_auth($my['group_id']); //這裡是因為用到用戶組取得用戶組的權限
header("location:main.php");
}else{
alert('提示:你輸入的用戶名與密碼不一致!','');
}
?>
上面的實例我都只保存信息到了session下面來看個同時應用session和cookie來保存用戶登錄信息
1、數據庫連接設備頁面:connectvars.php
<?php
//數據庫的地位
define(""DB_HOST"", ""127.0.0.1"");
//用戶名
define(""DB_USER"", ""root"");
//口令
define(""DB_PASSWORD"", ""19900101"");
//數據庫名
define(""DB_NAME"",""test"") ;
?>
2、登錄頁面:logIn.php
代碼如下 復制代碼<?php
//插入連接數據庫的相干信息
require_once ""connectvars.php"";
//開啟一個會話
session_start();
$error_msg = "";
//若是用戶未登錄,即未設置$_SESSION[""user_id""]時,履行以下代碼
if(!isset($_SESSION[""user_id""])){
if(isset($_POST[""submit""])){//用戶提交登錄表單時履行如下代碼
$dbc = mysqli_connect(DB_HOST,DB_USER,DB_PASSWORD,DB_NAME);
$user_username = mysqli_real_escape_string($dbc,trim($_POST[""username""]));
$user_password = mysqli_real_escape_string($dbc,trim($_POST[""password""]));
if(!empty($user_username)&&!empty($user_password)){
//MySql中的SHA()函數用於對字符串進行單向加密
$query = "SELECT user_id, username FROM mismatch_user WHERE username = ""$user_username"" AND "."password = SHA(""$user_password"")";
$data = mysqli_query($dbc,$query);
//用用戶名和暗碼進行查詢,若查到的記錄正好為一條,則設置SESSION和COOKIE,同時進行頁面重定向
if(mysqli_num_rows($data)==1){
$row = mysqli_fetch_array($data);
$_SESSION[""user_id""]=$row[""user_id""];
$_SESSION[""username""]=$row[""username""];
setcookie(""user_id"",$row[""user_id""],time()+(60*60*24*30));
setcookie(""username"",$row[""username""],time()+(60*60*24*30));
$home_url = ""loged.php"";
header(""Location: "".$home_url);
}else{//若查到的記錄不合錯誤,則設置錯誤信息
$error_msg = ""Sorry, you must enter a valid username and password to log in."";
}
}else{
$error_msg = ""Sorry, you must enter a valid username and password to log in."";
}
}
}else{//若是用戶已經登錄,則直接跳轉到已經登錄頁面
$home_url = ""loged.php"";
header(""Location: "".$home_url);
}
?>
<html>
<head>
<title>Mismatch - Log In</title>
<link rel="stylesheet" type="text/css" href="style.css" />
</head>
<body>
<h3>Msimatch - Log In</h3>
<!--經由過程$_SESSION[""user_id""]進行斷定,若是用戶未登錄,則顯示登錄表單,讓用戶輸入用戶名和暗碼-->
<?php
if(!isset($_SESSION[""user_id""])){
echo ""<p class="error">"".$error_msg.""</p>"";
?>
<!-- $_SERVER[""PHP_SELF""]代表用戶提交表單時,調用自身php文件 -->
<form method = "post" action="<?php echo $_SERVER[""PHP_SELF""];?>">
<fieldset>
<legend>Log In</legend>
<label for="username">Username:</label>
<input type="text" id="username" name="username"
value="<?php if(!empty($user_username)) echo $user_username; ?>" />
<br/>
<label for="password">Password:</label>
<input type="password" id="password" name="password"/>
</fieldset>
<input type="submit" value="Log In" name="submit"/>
</form>
<?php
}
?>
</body>
</html>
3、登入頁面:loged.php
<?php
//應用會話內存儲的變量值之前必須先開啟會話
session_start();
//若是會話沒有被設置,查看是否設置了cookie
if(!isset($_SESSION[""user_id""])){
if(isset($_COOKIE[""user_id""])&&isset($_COOKIE[""username""])){
//用cookie給session賦值
$_SESSION[""user_id""]=$_COOKIE[""user_id""];
$_SESSION[""username""]=$_COOKIE[""username""];
}
}
//應用一個會話變量搜檢登錄狀況
if(isset($_SESSION[""username""])){
echo ""You are Logged as "".$_SESSION[""username""].""<br/>"";
echo ""<a href="logOut.php"> Log Out("".$_SESSION[""username""]."")</a>"";
}
/**在已登錄頁面中,可以哄騙用戶的session如$_SESSION[""username""]、
* $_SESSION[""user_id""]對數據庫進行查詢,可以做很多多少很多多少工作*/
?>
4、刊出session與cookie頁面:logOut.php(刊出後重定向到lonIn.php)
代碼如下 復制代碼<?php
/**同時刊出session和cookie的頁面*/
//即使是刊出時,也必須起首開端會話才干接見會話變量
session_start();
//應用一個會話變量搜檢登錄狀況
if(isset($_SESSION[""user_id""])){
//要清除會話變量,將$_SESSION超等全局變量設置為一個空數組
$_SESSION = array();
//若是存在一個會話cookie,經由過程將到期時候設置為之前1個小時從而將其刪除
if(isset($_COOKIE[session_name()])){
setcookie(session_name(),"""",time()-3600);
}
//應用內置session_destroy()函數調用撤銷會話
session_destroy();
}
//同時將各個cookie的到期時候設為疇昔的某個時候,使它們由體系刪除,時候以秒為單位
setcookie(""user_id"","""",time()-3600);
setcookie(""username"","""",time()-3600);
//location首部使浏覽看重定向到另一個頁面
$home_url = ""logIn.php"";
header(""Location:"".$home_url);
?>
用戶注冊登錄涉及到用戶信息與數據庫的交互,因此要特別注意用戶提交的信息不能為非法信息,本例中注冊部分已經使用正則表達式做了限制,對登錄部分只簡單使用了 htmlspecialchars() 處理,實際應用時可更嚴格一些。
本教程只是簡單演示用戶注冊與登錄的過程,其代碼僅供學習參考,不可直接用於項目生產。
本教程中對於用戶登錄成功後采用 session 來管理,也可以采用 cookie 來管理,尤其對於有時限要求的情況。
為了提高用戶體驗,用戶注冊部分可以結合 AJAX 來檢測用戶輸入的信息而不必等點擊提交後再檢測。