ホームページ  >  記事  >  バックエンド開発  >  比較的完成したPHPセッション(セッション時間設定)の使用エントリコード_PHPチュートリアル

比較的完成したPHPセッション(セッション時間設定)の使用エントリコード_PHPチュートリアル

WBOY
WBOYオリジナル
2016-07-21 15:52:26693ブラウズ

Cookie の場合、ユーザーがログインしているかどうかを確認したいと仮定すると、ユーザー名とパスワード (おそらく md5 暗号化文字列) を Cookie に保存し、ページがリクエストされるたびにそれを確認する必要があります。ユーザー名とパスワードがデータベースに保存されている場合、毎回データベース クエリを実行する必要があり、データベースに不要な負担がかかります。一つだけの検証はできないからです。なぜ?クライアントの Cookie 内の情報が変更される可能性があるためです。ユーザーがログインしているかどうかを示す $admin 変数を保存する場合、$admin が true の場合はログインしていることを意味し、false の場合はログインしていないことを意味します。初めて検証に合格した後、$admin等しい true は Cookie に保存され、次回検証する必要はありません。はい、そうですか?違います。誰かが true の値を持つ $admin 変数を偽造した場合、その人はすぐに管理者権限を取得することを意味するのではありませんか?非常に危険です。

セッションはサーバー側に保存されているため、リモート ユーザーはセッション ファイルの内容を変更できません。そのため、最初の検証に合格した後は、$admin 変数を保存するだけで済みます。後で、$admin 値を true に設定します。値が true でない場合は、ログイン インターフェイスに移動します。これにより、多くのデータベース操作が軽減されます。また、Cookie を検証するために毎回パスワードを渡すという危険性を軽減できます (SSL セキュリティ プロトコルを使用しない場合、セッション検証は 1 回だけ行う必要があります)。パスワードが md5 で暗号化されている場合でも、簡単に傍受できます。

もちろん、Session を使用することには、簡単な制御、ユーザー定義のストレージ (データベースに保存される) など、多くの利点があります。ここではこれ以上多くは言いません。

php.iniでSessionを設定する必要があるのでしょうか?誰もが php.ini を変更できるわけではないため、通常は必要ありません。セッションのデフォルトの保存パスは、後で説明するようにカスタマイズして独自のフォルダーに保存できます。

まずはセッションの作成方法を紹介します。本当に、とてもシンプルです。

セッションを開始し、$admin 変数を作成します:

コードをコピーします コードは次のとおりです:

// セッションを開始します
session_start(); admin の変数に名前を付け、null 値を割り当てます。
$_SESSION["admin"] = null;
?>

Seesion を使用する場合、または PHP ファイルが Session 変数を呼び出したい場合は、session_start() 関数を使用して、Session を呼び出す前に Seesion を開始する必要があります。他に何も設定する必要はありません。PHP はセッション ファイルを自動的に作成します。

このプログラムを実行した後、システムの一時フォルダーに移動してセッション ファイルを見つけることができます。一般的なファイル名は sess_4c83638b3b0dbf65583181c2f89168ec の形式で、その後に 32 ビットでエンコードされたランダムな文字列が続きます。エディタで開き、その内容を確認します。

admin|N;

一般に、内容は次のように構成されています:

変数名|型:長さ:値

各変数をセミコロンで区切ります。 。長さや種類など一部は省略できます。

データベースにユーザー名とMD5で暗号化されたパスワードが保存されていると仮定して、検証手順を見てみましょう:


コードをコピー コードは次のとおりです:

<?php

//フォームが送信された後...
$posts = $_POST;
// いくつかの空白記号をクリアします
foreach ($posts as $key =>$value)
{
$posts[ $key ] = トリム($値);
$パスワード = md5($posts["パスワード"]);
$ユーザー名 = $posts["ユーザー名"];

$query = "SELECT `ユーザー名` `user ` WHERE `password` = '$password'";
//クエリ結果を取得
$userInfo = $DB->getRow($query);

if (!empty($userInfo))
{
if ( $userInfo ["username"] == $username)
{
// 検証が成功したら、セッションを開始します
session_start();
// ログイン成功のための admin 変数を登録し、値 true を割り当てます
$_SESSION[ "admin"] = true ;
}
else
{
die("ユーザー名とパスワードが間違っています");
}
}
else
{
}

ユーザー認証が必要なページにあります セッションを開始し、ログインするかどうかを決定します:

// グローバル変数がセキュリティリスクを引き起こすのを防ぎます
$admin = false;

// セッションを開始します。この手順は必須です。
session_start();

// ログインするかどうかを判断する
if (isset($_SESSION["admin"]) && $_SESSION["admin"] === true)
{
echo "ログインに成功しました";
}
else
{
// 検証に失敗しました。$_SESSION["admin"] を false に設定します
$_SESSION["admin"] = false;
die("アクセスする権限がありません")
;
?>



すごく簡単じゃないですか? $_SESSION はサーバー側に保存される配列と考えてください。登録する各変数は配列のキーであり、配列を使用するのと何ら変わりません。

システムからログアウトしたい場合はどうすればよいですか?セッションを破棄するだけです。




コードをコピーします
コードは次のとおりです: <?php
session_start()
// このメソッドは、最初に登録された特定の変数を破棄します
unset($_SESSION[" admin"]) ;
// このメソッドはセッションファイル全体を破棄します
session_destroy();



SessionはCookieのようにライフサイクルを設定できますか? Session では、Cookie を完全に放棄する必要がありますか? Session と Cookie を組み合わせて使用​​するのが最も便利だと思います。
Session はクライアント ユーザーをどのように決定するのでしょうか?セッション ID とはセッション ファイルのファイル名であり、セッション ID はランダムに生成されるため、セッションの一意性とランダム性が保証されます。通常、セッションの有効期間が設定されていない場合、セッション ID はブラウザを閉じた後、自動的にログアウトされ、新しいセッション ID が登録されます。

クライアントが Cookie を無効にしない場合、Cookie はセッションの開始時にセッション ID とセッションの有効期間を保存する役割を果たします。

Session の有効期間を手動で設定しましょう:




コードをコピーします
コードは次のとおりです: <?php
session_start()
// 1 日保存します
$lifeTime = 24 * 360 0;
setcookie( session_name(), session_id(), time() + $lifeTime, "/");
?>


実際、Session には Session_set_cookie_params(); という関数も用意されています。この関数は session_start () 内にある必要があります。 関数呼び出しの前に呼び出されます:



コードをコピーします
コードは次のとおりです:

<?php

// 1 日保存
$lifeTime = 24 * 3600;
$_SESSION["admin"] = true;クライアントが IE 6.0 を使用している場合、session_set_cookie_params() 関数では Cookie の設定に問題が発生するため、依然として setcookie 関数を手動で呼び出して Cookie を作成します。

クライアントが Cookie を無効にしている場合はどうすればよいですか?ブラウザを閉じてページを再度リクエストする限り、ライフサイクル全体がブラウザのプロセスであるため、セッションを再登録する必要があります。では、セッション ID を渡すにはどうすればよいでしょうか? URL または非表示フォームを介して渡されると、PHP はセッション ID を URL に自動的に送信します。URL は http://www.openphp.cn/index.php?PHPSESSID=bba5b2a240a77e5b44cfa01d49cf9669 の形式になります。ここで、パラメータは PHPSESSID です。 URL にセッション ID がある場合、$_GET を使用して値を取得することで、ページ間のセッション ID の転送を実現できます。



コードをコピーします

コードは次のとおりです:
<?php // 1 日保存します $lifeTime = 24 * 3600; 現在のセッション名を取得します。デフォルトは次のとおりです。 PHPSESSID
$sessionName = session_name() ;
// セッション ID を取得
$sessionID = $_GET[$sessionName];
// 取得したセッション ID を設定するには、 session_id() を使用します

session_set_cookie_params( $lifeTime);
session_start();
$_SESSION["admin"] = true;


仮想ホストの場合、すべてのユーザーのセッションがシステムの一時フォルダーに保存されると、メンテナンスが困難になります。セッションファイルの保存パスを手動で設定できるのは、session_save_path() のような機能です。もちろん、Web 経由でアクセスできないフォルダーをセッション ストレージ ディレクトリに指定することもできます。そのフォルダーには読み取り/書き込み属性が必要です。




コードをコピーします

コードは次のとおりです:


<?php
//保存ディレクトリを設定します
$savePath = "./session_save_dir/"; //1日保存します $lifeTime = 24 * 3600; session_set_cookie_params($lifeTime); $_SESSION["admin"] = true;
session_set_cookie_params(); 関数と同様に、session_save_path() 関数も session_start() 関数を呼び出す前に呼び出す必要があります。

配列やオブジェクトをSessionに保存することもできます。配列の操作と一般変数の操作に違いはありません。オブジェクトを保存する場合、PHP はオブジェクトを自動的にシリアル化し (シリアル化とも呼ばれます)、セッションに保存します。次の例は、この点を示しています。

<?php
class person
{
var $age;
function Output() {
echo $this->age
}

function setAge($age) {
$this ->年齢 = $年齢;
}
?>
setage.php
require_once "person.php"; (21);
$_SESSION['person'] = $person;
echo "<a href='output'>年齢を出力するにはここにチェックを入れます</a>"; / オブジェクトが確実に再構築されるようにコールバック関数を設定します。
ini_set('unserialize_callback_func', 'mycallback');
関数 mycallback($classname)
}
$person = $_SESSION["person"]; / 出力 21
$person->output();
?>

setage.php ファイルを実行すると、setage() メソッドを呼び出し、年齢を 21 に設定し、ステータスをシリアル化してセッションに保存します ( PHP はこの変換を自動的に完了します)、output.php に移動するときに、この値を出力するには、保存したばかりのオブジェクトを逆シリアル化する必要があります。また、逆シリアル化するときに未定義のクラスをインスタンス化する必要があるため、自動的にインクルードするコールバック関数を定義しました。 person.php クラス ファイルなので、オブジェクトが再構築され、現在の年齢値が 21 として取得され、output() メソッドが呼び出されて値が出力されました。

さらに、session_set_save_handler 関数を使用して、Session の呼び出しメソッドをカスタマイズすることもできます。



http://www.bkjia.com/PHPjc/318964.html

www.bkjia.com

tru​​e

http://www.bkjia.com/PHPjc/318964.html
技術記事

Cookie の場合、ユーザーがログインしているかどうかを確認したいと仮定すると、ユーザー名とパスワード (おそらく md5 暗号化文字列) を Cookie に保存し、ページがリクエストされるたびにそれを入力する必要があります...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。