cookie
cookle常用來識別用戶,可以理解為瀏覽器留下的一種文件,cookie可以分為會話cookie和硬盤cookie兩種,會話cookie生命周期短,瀏覽器關閉即銷毀,硬盤cookie生命周期由開發者設定,可長可短
1.創建cookie
PHP創建cookie使用函數setcookie(name,value,expire,path,domain,secure);
參數:
name:設定cookie的名稱
value:cookie的值
expire:cookie的有效時長,如果不設置則為會話cookie
path:規定 cookie 的服務器路徑
domain:規定 cookie 的域名
secure:規定是否只能通過HTTPS傳輸cookie,默認f
2.讀取cookie
使用$_cookie[]
3.更新cookie
同樣使用setcookie();
4.刪除cookie
把cookie的有效時長設置為負值即可
需要注意:更新和刪除cookie時,path,domain值必須與之前的一致
5.使用cookie實現登錄
思路:
1.最終目標
:將用戶輸入數據與數據庫中數據做比較,如果對比成功,跳轉到主頁,如果用戶直接訪問主頁,彈窗阻止,但如果用戶勾選自動登錄復選框,則第一次登錄成功后,在一段時間內允許直接訪問主頁。
2.實現思路:
1.1 首先如果用戶勾選復選框,登陸時產生一個包含md5加密后的用戶名密碼的硬盤cookie,反之產生一個同樣的內存cookie,主頁調用數據庫中的用戶名,密碼,用同樣的加密方法加密一個密文,與cookie中的value作比較,相同則允許進入,為了方便從數據庫中找到相關用戶,可在登錄cookie的密文值后面加一個明文id,在主頁拆分即可。
登錄前端的html不寫了
<?phpheader("Content-type: text/html; charset=utf-8");
$usename=$_POST['usename']; //接受用戶名
$passname=$_POST['pass'];//接受密碼
$autologin=$_POST['check'];//接受是否自動登錄
echo $autologin;
//接入數據庫
$host = '127.0.0.1';
$user = 'root';
$pass = 'root';
$port=3306;
$link=@mysqli_connect("$host","$user","$pass","t2","3306");
@mysqli_set_charset($link,"utf8");
mysqli_select_db($link,'yonghu');//選擇數據表
$sql="select id,username,password from yonghu WHERE username='{$usename}'&&password='{$passname}'";
$result=mysqli_query($link,$sql);
if(mysqli_num_rows($result)==1)
{//如果用戶選擇自動登錄,則cookle類型設置為硬盤cookleif($autologin==1){$row=mysqli_fetch_assoc($result);setcookie('usename',$usename,strtotime("+1 hours"));//加密操作$son="zeianquan";$key=md5($usename.$passname.$son).":".$row['id'];setcookie('key',$key,strtotime("+1 hours"));}//否則,將cookle設置為會話cookleelse{setcookie('$usename',$usename);}exit("<script>alert('登錄成功!');location.href='gerenjianjie.php';</script>");
}
else
{exit('用戶名或密碼錯誤.<a href="Untitled-2.php">重新注冊</a>');
}
?>
<?php
header("Content-type: text/html; charset=utf-8");
if(!isset($_COOKIE['usename']))
{exit("<script>alert('請首先登錄1!');location.href='dengluhouduan.php';</script>");
}
if(isset($_COOKIE['key'])) {$key = $_COOKIE['key'];
//找到cookle中的用戶id ,與數據庫中做對比,如果有,判斷key是否正確,否則返回登錄$resarr = explode(":", $key);$useid = end($resarr);
//接入數據庫$host = '127.0.0.1';$user = 'root';$pass = 'root';$port = 3306;$link = @mysqli_connect("$host", "$user", "$pass", "t2", "3306");@mysqli_set_charset($link, "utf8");mysqli_select_db($link, 'yonghu');//選擇數據表$sql = "select * from yonghu WHERE id=$useid";$result = mysqli_query($link, $sql);
//用戶id存在,做進一步校驗if (mysqli_num_rows($result) == 1) {
//校驗思路:首先從數據庫獲取用戶名,密碼,用相同的辦法加密,看密文與cookle中的是否相同$row = mysqli_fetch_assoc($result);$usename_t = $row['username'];$password_t = $row['password'];$file=$row['file'];$key = "zeianquan";$key_t = md5($usename_t.$password_t.$key);if ($key_t!= $resarr[0]){exit("<script>alert('請首先登錄2!');location.href='dengluhouduan.php';</script>");}}else {exit("<script>alert('請首先登錄3!');location.href='dengluhouduan.php';</script>");}
}
?>
<!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><?php echo $usename_t?>的主頁</title>
</head>
<body >
這是主頁!!!!!!
</body>
</html>
session
session識別用戶的,他與cookie的不同在于Cookie保存在客戶端瀏覽器中,而Session保存在服務器上,因此,session的工作原理是為每個訪客創建一個UID,一般通過cookie保存,或者通過URL傳導。
1.開始session
session_start();
必須位于HTML標簽之前
2.設置數據
$_session['name']=.........
或者$-session=$var;
3.生命周期
可使用cookie設置
setcookie(session_name,session_id,expire);
4。用戶禁用cookie后,可以使用URL傳遞UID
比如用一個超鏈接
<a href="####".session_id.>
session