ホームページ バックエンド開発 PHPチュートリアル PHP でのセッションと thinkphp_PHP でのセッションの使用法チュートリアル

PHP でのセッションと thinkphp_PHP でのセッションの使用法チュートリアル

Jul 13, 2016 am 10:49 AM
php session thinkphp そして はい 使用法

セッションはphpで非常に一般的に使用されるグローバル変数です。ここで、phpセッションの使用方法を初心者にいくつか紹介します。一緒に見てみましょう。

PHP サーバーのデフォルトのセッション保存方法は、Windows では、C:/WINDOWS/Temp に保存されます。*NIX では、同時アクセスの場合、デフォルトで /tmp に保存されます。作成されるセッションが多すぎると、これら 2 つのディレクトリに sess_xxxxxx に似たセッション ファイルが大量に存在することになり、パフォーマンスが低下し、攻撃が発生し、最終的にはファイル システム エラーが発生する可能性があります。この状況に対しては、PHP 自体がより良い解決策を提供します。
多くの友人は、php.ini のセッション設定セクションにこのような項目があることに気づいていないかもしれません:
; session.save_path = "N; モード; /パス"

この設定により、セッション保存ディレクトリでマルチレベルのハッシュを実行できます。「N」は設定するディレクトリ レベルを表し、「MODE」はディレクトリの権限属性を表します。デフォルトは 600 です。 WINDOWS では設定する必要はありません。*NIX では設定する必要はありません。次の「/path」は、セッション ファイルが保存されているルート ディレクトリのパスを表します。

session.save_path = "2; /tmp/phpsession"

上記の設定は、PHP セッション ファイルを保存するルート ディレクトリとして /tmp/phpsession ディレクトリを使用し、このディレクトリで 2 レベルのディレクトリ ハッシュを実行することを意味します。ディレクトリの各レベルは 0 ~ 9 と a ~ z で、合計が 0 ~ 9 です。 36 個の英数字のディレクトリ名。セッションを保存するディレクトリの数は 36*36 に達します。システム アーキテクチャが複数のサーバーとセッション データを共有するように設計されている場合は、ディレクトリ レベルを 36 まで増やすことができます。レベル3以上。

php 自体はサブディレクトリを自動的に作成しないことに注意してください。ディレクトリを自動的に作成するための次のコードは参考として使用できます。以下のコードはレベル 3 のサブディレクトリを自動的に作成します。これは必要に応じて変更できます。

コードは次のとおりです コードをコピー
set_time_limit(0);

$string = '0123456789abcdefghijklmnopqrstuvwxyz';

$length = strlen($string);

関数 makeDir($param)

{

if(!file_exists($param)) {

makeDir(ディレクトリ名($param));

mkdir($param);

}

}

for($i = 0; $i < $length; $i++) {

for($j = 0; $j < $length; $j++) {

for($k = 0; $k < $length; $k++) {

makeDir($string[$i].'/'.$string[$j].'/'.$string[$k]);

}

}

}

?>

より良い 2 つの解決策を以下に示します:
1.セッションストレージ

session_set_save_handler関数を使用する

機能: SESSIONストレージメカニズムをカスタマイズします。

セッションストレージなどの操作の実行など、セッションストレージメディアの変更に使用できます。

サンプルコード

コードは次のとおりです コードをコピー
クラスセッションテーブルはdbを拡張します{
Protected $table_name = 'セッション';
パブリック関数 __construct(){
親::__construct();
session_set_save_handler(
array($this,'sess_open'),
array($this,'sess_close'),
array($this,'sess_read'),
array($this,'sess_write'),
array($this,'sess_destroy'),
配列($this,'sess_gc')
);
session_start();
}
パブリック関数 sess_open($save_path,$session_name){
true を返します;

}
パブリック関数 sess_close(){
true を返します;
}


パブリック関数 sess_read($sess_id){
$sql = "select * from {$this->getTable()} where sess_id='{$sess_id}'";
$row = $this->getRow($sql);
return $row['sess_data'];
}
パブリック関数 sess_write($sess_id,$sess_data){

$expire = time();
$sql = "重複キーの {$this->getTable()} の値 ('{$sess_id}','{$sess_data}','{$expire}') を挿入します
更新 sess_data='{$sess_data}',expire='{$expire}'";
return $this->query($sql);
}

パブリック関数 sess_destroy($sess_id){

$sql = "{$this->getTable()} から削除 (sess_id='{$sess_id}')";

return $this->query($sql);

}
パブリック関数 sess_gc($life_time){
$expire = time() - $life_time;
$sql = "期限切れ return $this->query($sql);
}



}

2. memcache を使用してセッションを保存します


方法 I: php.ini でグローバルに設定する
session.save_handler = memcache
session.save_path = "tcp://127.0.0.1:11211"

方法 II: 特定のアプリケーションで ini_set 設定を使用する
ini_set("session.save_handler", "memcache");
ini_set("session.save_path", "tcp://127.0.0.1:11211");

複数の memcached サーバーを使用する場合は、それらをカンマ「,」で区切ります。Memcache::addServer() ドキュメントで説明されているように、追加パラメーター「persistent」、「weight」、「timeout」、「retry_interval」などを取得できます。お待ちください。「tcp://host1:port1?persistent=1&weight=2,tcp://host2:port2」のようなものです。

1. phpでセッションを操作する方法:

session_start(); //この関数を使用してセッション関数を開きます

$_SESSION //事前定義されたグローバル変数を使用してデータを操作します

Use unset($_SESSION['key']) //セッションの値を破棄します

操作が簡単で、すべてがサーバーによって実装されるため、処理がバックグラウンドで行われるため、すべてが安全に見えます。しかし、セッションはどのようなメカニズムを使用し、どのように実装され、セッション状態はどのように維持されるのでしょうか?

2.セッションの実装と動作原理

ブラウザとサーバーは http ステートレス通信を使用し、クライアントの状態を維持するためにセッションを使用します。しかし、サーバーはどのようにしてさまざまなクライアントやユーザーを識別するのでしょうか?
ここで、人生の例を見てみましょう。パーティーに参加してたくさんの人に会った場合、さまざまな人をどのように区別しますか?顔の形やユーザーの名前に基づいて決定することもできます
または、一意の ID を使用する個人の ID カード。セッション メカニズムでは、このような一意の session_id はさまざまなユーザーを識別するためにも使用されます。違いは、ブラウザーがリクエストごとに
をもたらすことです。 サーバーによって生成された session_id

プロセスの簡単な紹介: クライアントがサーバーにアクセスすると、サーバーは必要に応じてセッションを設定し、セッション情報をサーバーに保存し、セッションを示す session_id をクライアントのブラウザーに渡します。 ブラウザはこの session_id をメモリに保存します (URL に書き込むなど、他の保存方法もあります)。これを有効期限のない Cookie と呼びます。ブラウザを閉じると、この Cookie はクリアされ、ユーザーの一時 Cookie ファイルは含まれなくなります。
将来的には、ブラウザはこのパラメータ値をすべてのリクエストに追加し、サーバーはこの session_id に基づいてクライアントのデータ ステータスを取得できるようになります。

クライアントのブラウザが予期せず閉じられた場合、サーバーによって保存されたセッション データはこの時点ではまだ存在しますが、session_id がわかっている限り、リクエストを通じてセッション情報を取得し続けることができます。現時点では、バックグラウンド セッションはまだ存在しますが、セッションの保存には有効期限があります

。 指定された時間を超えてクライアント要求がない場合、セッションはクリアされます。

以下では、セッション保存メカニズムを紹介します。デフォルトのセッションはファイルに保存されます。つまり、セッションデータはファイルの形式で保存されます。 phpでは主にphp.iniのsession.save_handlerの設定に基づいています

をクリックしてセッションを保存する方法を選択します。

ちなみに、サーバー LVS、つまり複数のサーバーを作成したい場合、通常は memcached セッションを使用します。そうしないと、一部のリクエストがセッションを見つけることができなくなります。

単純な memcache 構成:

session.save_handler = memcache session.save_path = "tcp://10.28.41.84:10001"

もちろん、ファイル ファイル キャッシュを使用する必要がある場合は、nfs を使用してファイルを保存し、保存されたすべてのセッション ファイルを 1 か所に配置できます。

ここで、ユーザーに返されたセッション ID が最終的にメモリに保存され、ユーザーの URL に保存するパラメーターを設定することもできます。



ThinkPHP 公式ドキュメント

01.start セッションを開始します

02.pause セッションを一時停止します

03.クリアクリアセッション
04.デストロイ デストロイセッション
05.get セッション値を取得します
06.getLocalはプライベートセッション値を取得します
07.set セッション値を設定します
08.setLocal はプライベートセッション値を設定します
09.name は session_name を取得または設定します
10.is_set セッション値を設定するかどうか
11.is_setLocal プライベートセッション値を設定するかどうか
12.id session_id を取得または設定します
13.path session_save_path を取得または設定します
14.setExpire セッションの有効期限を設定します
15.setCookieDomain は有効なドメイン名を設定します
16.setCallbackは、Sessionオブジェクトが逆シリアル化されるときにコールバック関数を設定します
最も一般的なハウツーの例:

コード: 01.//セッション変数が存在するかどうかを検出します

セッションに関連する設定パラメータ:
コードは次のとおりです コードをコピー

02.Session::is_set('name');

03. //セッション変数に値を代入します
04.
セッション::set('名前','値'); 05.
// セッション変数を取得します
06.
セッション::get('名前');

コード:

コードは次のとおりです01.'SESSION_NAME'=>'ThinkID', // デフォルトのセッション名SESSION_NAME パラメータに注意する必要があります。異なるプロジェクト間でセッションの値を共有する必要がない場合は、別の値を設定してください。それ以外の場合は、同じデフォルト値を維持してください。
コードをコピー

02.

'Session_path' = & gt '', // デフォルトのセッション保存パスを使用します


; 03.
'Session_type' = & gt', // デフォルトのセッション タイプ タイプは DB と FILE をサポートします
; 04.
'SESSION_EXPIRE' =&gt; '300000'、//デフォルトセッションの妥当性期間
05.
'SESSION_TABLE'=>'think_session', // データベース セッション モード テーブル名
06.
'SESSION_CALLBACK' =&gt; ''、//オブジェクトを降らせるためのコールバックメソッド

同じ SESSION_NAME 値が設定されているが、プロジェクトに基づいてプライベート セッション スペースを作成したい場合は、どうすればよいでしょうか? ThinkPHP は、プロジェクトをセッション空間として使用するプライベート セッション操作もサポートしています。例として、これを次のように変更します。

コード:

コードは次のとおりですコードをコピー01.//セッション変数が存在するかどうかを検出します(現在のプロジェクトが有効であるかどうか) 02.Session::is_setLocal('name');ThinkPHP は、SESSION_TYPE の値を DB に設定するだけで、SESSION_TABLE の値を設定し、次の DDL をデータベースにインポートします (MySQL を例にします)。 コード:

03. // セッション変数に値を割り当てます (現在のプロジェクトに有効)
04.

セッション::setLocal('名前','値'); 05.

// セッション変数を取得します (現在のプロジェクトに有効)
06.
Session::getLocal('name');




この方法では、グローバルなセッション操作と競合せず、いくつかの特別な状況に使用できます。

コードは次のとおりです

コードをコピー

01.CREATE TABLE `think_session` (02. id` int(11) unsigned NOT NULL auto_increment、 03. session_id` varchar(255) NOT NULL、
04.

session_expires` int(11) NOT NULL、

05.

session_data` blob、
06.
主キー (`id`)
07.)



Db セッション モードでのデータベース接続では、接続するプロジェクトのデータベース構成情報が使用されることに注意してください。データベース メソッドに加えて、メモリ メソッド、Memcache メソッドなどの他のセッション保存メカニズムのメソッドを追加することもできます。必要なのは、session_set_save_handler メソッドを使用して、対応するフィルタを追加することだけです。具体的なメソッドの定義については、を参照してください。 Think.Util.Filter の下の FilterSessionDb の .class.php ファイルの実装。

簡易ログイン判定を作成しました

ログイン検出後、セッション値が空または false になるようにセッション値を割り当てます

コードは次のとおりです コードをコピー
$_SESSION[C('USER_AUTH_KEY')] = $logInFind['id'] ;

ここで、[C('USER_AUTH_KEY')] は ThinkPHP の組み込みメソッドおよび関数クラスです。 config.php ファイルが設定されていない場合、デフォルトは空になります
$logInFind['id'] で取得したアカウント値を指定します。デフォルトでは、ページを閉じるとセッションが自動的に削除されます。

他のページを判断するには次のフォーマットを使用してください

コードは次のとおりです コードをコピー
if(!isset($_SESSION[C('USER_AUTH_KEY')])) { //isset は変数に値が割り当てられているかどうかを確認することです!
$this->redirect('Login','Login') //登録ページに移動します
}

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/632699.html技術記事 Session は PHP で非常によく使われるグローバル変数です。ここで、PHP セッションについての使い方の概要を初心者向けに紹介します。次は...
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

CakePHP の日付と時刻 CakePHP の日付と時刻 Sep 10, 2024 pm 05:27 PM

Cakephp4 で日付と時刻を操作するには、利用可能な FrozenTime クラスを利用します。

CakePHP ファイルのアップロード CakePHP ファイルのアップロード Sep 10, 2024 pm 05:27 PM

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

CakePHP ルーティング CakePHP ルーティング Sep 10, 2024 pm 05:25 PM

この章では、ルーティングに関連する次のトピックを学習します。

CakePHP について話し合う CakePHP について話し合う Sep 10, 2024 pm 05:28 PM

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

CakePHP バリデータの作成 CakePHP バリデータの作成 Sep 10, 2024 pm 05:26 PM

Validator は、コントローラーに次の 2 行を追加することで作成できます。

PHPでHTML/XMLを解析および処理するにはどうすればよいですか? PHPでHTML/XMLを解析および処理するにはどうすればよいですか? Feb 07, 2025 am 11:57 AM

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

See all articles