PHPの基礎知識(4)〜Cookieの使い方
PHPの基礎知識 - Cookieの使い方
サンプルコードダウンロードページ http://xieye.iteye.com/blog/1336095 (添付ファイル内)
Cookieの簡単な定義: ブラウザが送信するときサーバーへのリクエスト 追加の送信データ。
Cookie の原理: Web プロトコルでは、サーバーがリクエストを返すと、次回ブラウザが同じドメイン ネーム サーバーに情報をリクエストするときに、データの一部をブラウザ クライアントに保存できると規定されています。
同時にこのセクションが自動的に保存され、情報はサーバーに送信されるため、ユーザーはこれらのことを理解する必要がなく、通常どおりインターネットを閲覧できます。
Cookie の機能の 1 つは、サーバーが時間パラメータを使用してクライアントを保存できることです。ブラウザはこのパラメータを使用して、Cookie の有効期限が切れているかどうかを判断します。有効期限が切れると、Cookie は
サーバーに届きません。
サーバーが Cookie を処理しない場合、ブラウザはサーバーにリクエストを送信するたびに、同じ内容の Cookie を自動的に送信します。
Cookie のもう 1 つの特徴は、複数の名前と値の組み合わせです。
例: 自動ログイン。
ホームページとログイン ページが 1 つの 3 つのページがあります
最初にユーザーを追加する必要があります
test.member(username,password)values('admin', md5('1' ) );
9.php、10.php、11quit.php は自動ログインなしの例です。
19.php、20.php、21quit.php は自動ログインの例です。
デモ
最初は一般的なログイン例です
http://localhost/command/peixun/cookie/9.php、ログインのプロンプト
10.phpと入力し、adminと入力します。 1 次に、9.php にジャンプします。現在のユーザー名が表示されます。必要に応じて終了できます。
「終了」ボタンをクリックしない場合は、ブラウザを直接閉じてから、ブラウザを開いて http://localhost/command/peixun/cookie/9.php と入力すると、ログインしていないことがわかります。
次に、Cookie を使用した自動ログインの例を示します。
http://localhost/command/peixun/cookie/19.php、ログインを求めるプロンプト
10.php と入力すると、追加のチェックボックスがあることがわかります。チェックされていない場合、その効果はまったく同じです。上記の例と同様に「admin」と入力すると、「1」と入力すると 19.php にジャンプし、現在のユーザー名が表示されます。必要に応じて終了します。
チェックを入れてadminと入力すると、19.phpにジャンプします。このとき、「終了」リンクをクリックしてブラウザを直接閉じることはできません。
デスクトップ上のブラウザ アイコンをダブルクリックすると、ブラウザが再度開き、ログインしていることがわかります。これは Cookie の効果です。
重要な注意事項: この例は Cookie の使用法を示すためにのみ使用されており、実際のアプリケーションではセキュリティ上の理由から、Cookie フィールドの意味を隠すことが最善であり、プログラムを変更する必要があります。それに応じて。
コードはダウンロードできます。2 番目の例のコードのみが表示されています
19.php
<?php //会话的第2个例子,首页 //9.php,简单例子,首页 //10.php,简单例子,登录页 //11quit.php,简单例子,退出页 //19.php, 复杂例子,首页 //20.php, 复杂例子,登录页 //21quit.php, 复杂例子,退出页 require_once('../Public/CommandLine.php'); session_start(); //逻辑是如果未登录,则显示“请登录”,如果已登录,显示欢迎某某某 $html = ''; if (isset($_SESSION['islogin']) && $_SESSION['islogin'] == 1 ) { //已登录 $html .= '欢迎您,' . $_SESSION['username'] . " <a href='11quit.php'>退出</a>"; } else { //未登录分:有cookie的记住我,且为1 if (isset($_COOKIE['rememberme']) && $_COOKIE['rememberme']==1 ) { $username = strval($_COOKIE['username']); $password = strval($_COOKIE['password']); $db = Sys::getdb(); $select = $db->select(); $select->from('test.member', 'count(*)' ) ->where('username=?', $username) ->where('password=?', $password); $result = $db->fetchOne($select); if ($result) { //如果是对的 $_SESSION['islogin'] = 1; $_SESSION['username'] = $username; $html .= '欢迎您,' . $_SESSION['username'] . " <a href='21quit.php'>退出</a>"; } } } if(!( isset($_SESSION['islogin']) && $_SESSION['islogin'] == 1 ) ){ $html .= '<a href="20.php">请登录</a>'; } $html .= "<br><h1>这是首页<h1>"; echo $html;
<?php //自动登录的登录页 require_once('../Public/CommandLine.php'); session_start(); $isget = ($_SERVER['REQUEST_METHOD'] == 'GET') ? 1 : 0; if ($isget) { $html = <<<longs <html> <body> <form method="post"> 请输入用户名:<input type="text" name="username" value=''><br> 请输入密码:<input type="text" name="password" value=''><br> <input type="checkbox" name="rememberme" value="1" />下次自动登录<br> <input type="submit" value="登录" > </form> </body> </html> longs; echo $html; } else { //echo $_POST['name1']; $username = $_POST['username']; $password = $_POST['password']; $db = Sys::getdb(); $select = $db->select(); $select->from('test.member', 'count(*)' ) ->where('username=?', $username) ->where('password=?', md5($password)); $result = $db->fetchOne($select); if ($result) { $_SESSION['islogin'] = 1; $_SESSION['username'] = $username; $time = time() + 3600 * 24 * 365; setcookie('rememberme', intval($_POST['rememberme']), $time, "/"); setcookie('password', md5($password), $time, "/"); setcookie('username', $username, $time, "/"); header('Location: 19.php'); }else { $html = <<<longs <html> <body> 请输入正确的用户名和密码 <form method="post"> 请输入用户名:<input type="text" name="username" value='{$username}'><br> 请输入密码:<input type="text" name="password" value='{$password}'><br> <input type="checkbox" name="rememberme" value="1" />下次自动登录<br> <input type="submit" value="登录" > </form> </body> </html> longs; echo $html; } }
<?php //第2个例子,自动登录的退出页 require_once('../Public/CommandLine.php'); session_start(); $_SESSION['islogin'] =0; $date = time() - 3600 * 24 * 365; foreach($_COOKIE as $key => $ko){ if ($key != 'PHPSESSID') { setcookie($key, "", $date, "/"); //删除cookie的写法 } } header('Location: 19.php');