這節我們透過一個使用者第一次登陸網站後,再次造訪不需要重複輸入使用者名稱和密碼的範例來學習Cookie。
先介紹一下php中設定cookie的方法。
php中提供了一個函數來讓我們設定cookie,這個函數是:
bool setcookie ( string $名字 [, string $值] [, int $过期时间 = 0] [, string $路径] [, string $域名] [, bool $安全 = false] [, bool $http只读 = false] );
參數 描述
$名字 必要。規定 cookie 的名稱。
$值 可選。規定 cookie 的值。
$有效期限 可選。規定 cookie 的有效期限。
$路徑 可選。規定 cookie 的伺服器路徑。
$域名 可選。規定 cookie 的網域名稱。
$安全 可選。規定是否透過安全的 HTTPS 連線來傳輸 cookie。
$http安讀 可選。如果true,那麼js就無法讀取改cookie,增加安全性。
一般來說,我們其實用不到上面那麼多參數,對於這個函數,我們一般這麼用: setcookie(cookie名稱,cookie值,cookie有效期);
沒錯,就那麼3個。如此一來,我們就可以在服務端透過$_COOKIE['name'] 來讀取cookie了。
以下是範例:
我們將檔案名稱命名為:cookie.php。
我們來模擬我們在網路上見到最常見的例子:輸入使用者名稱和密碼,登陸成功的過程。
我們來建立一個資料庫login,其中有表user,有username和password這兩個欄位。
<?php //第一次登陆的时候,通过用户输入的信息来确认用户 if ( ( $_POST['username'] != null ) && ( $_POST['password'] != null ) ) { $userName = $_POST['username']; $password = $_POST['password']; //从db获取用户信息 //PS:数据库连接信息改成自己的 分别为主机 数据库用户名 密码 $conn = mysqli_connect('localhost','root','root'); mysqli_select_db($conn,'test'); $sql = "select * from user where `username` = '$userName' "; $res = mysqli_query($conn,$sql); $row = mysqli_fetch_assoc($res); if ($row['password'] == $password) { //密码验证通过,设置cookies,把用户名和密码保存在客户端 setcookie('username',$userName,time()+60*60*24*30);//设置时效一个月,一个月后这个cookie失效 setcookie('password',$password,time()+60*60*24*30); //最后跳转到登录后的欢迎页面 header('Location: welcome.php' . "?username=$userName"); } } //再次访问的时候通过cookie来识别用户 if ( ($_COOKIE['username'] != null) && ($_COOKIE['password'] != null) ) { $userName = $_COOKIE['username']; $password = $_COOKIE['password']; //从db获取用户信息 //PS:数据库连接信息改成自己的 分别为主机 数据库用户名 密码 $conn = mysqli_connect('localhost','root','root','test'); $res = mysqli_query($conn,"select * from user where `username` = '$userName' "); $row = mysqli_fetch_assoc($res); if ($row['password'] == $password) { //验证通过后跳转到登录后的欢迎页面 header('Location: welcome.php' . "?username=$userName"); } } ?> <html> <head> </head> <body> <form action="" method="POST"> <div> 用户名:<input type="text" name="username" /> 密 码:<input type="text" name="password" /> <input type="submit" value="登录"> </div> </form> </body> </html>
跳到的welcome.php程式碼
<?php $user = $_GET['username']; ?> <html> <head> </head> <body> welcome,<?php echo $user;?> </body> </html>
這樣,當我第一次造訪cookie.php的時候,我需要輸入使用者名稱和密碼,輸入後跳到了welcome .php。然後我關閉瀏覽器,再次打開cookie.php,這次沒有要求我輸入用戶信息,而是直接跳到了welcome.php,因為之前我們存的cookie信息被瀏覽器自動發送到了服務端,服務端做完處理直接跳到了welcome.php,伺服器認識我們了!知道我是之前那個登陸的用戶,這樣我們就透過cookie技術讓無狀態的HTTP協定保持了狀態。
照著這個做一遍,我相信你會用cookie了。
只不過! ! !只不過! ! !只不過! ! !重要的事要說3遍,我們一般是不會把用戶名和密碼放到cookie中的,因為這並不安全,容易洩露自己的信息,請不要把重要的信息放到cookie中。我們這個只是一個學習cookie的例子。
下一節