ホームページ  >  記事  >  バックエンド開発  >  php session_set_save_handler関数の使用法を解析する(mysql)_PHPチュートリアル

php session_set_save_handler関数の使用法を解析する(mysql)_PHPチュートリアル

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

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

/*==============================ファイル説明========= == =============================
@filename: Session.class.php
@description: データベースはオンライン ユーザー セッションを保存しますオンラインユーザー機能を実現!
@notice: 当サイトではログインに Cookie (有効時間は 1 時間) を使用しているため、セッションの有効期限は 1 時間です。
したがって、一度更新して更新するのではなく、ユーザーがログインした時刻のみを記録します。データベース内のセッションレコードを削除するアクションは、ユーザーがタイムアウトしてこのファイルを実行するか、正常に終了したときに発生します(session_destory)
@database。 : データベース:セッション フィールド:sessionid(char32 )、uid(int10)、last_visit(int10)
============================= =========== ======================================
*/
class session {
private $db ;
private $lasttime=3600;//タイムアウト: 1 時間
function session(&$db) {
, これは必見です!Php.ini ファイルで設定されていない場合
session_set_save_handler(
array(&$this, 'open'), // session_start() の実行時に実行される
array(&$this, 'close'), // スクリプト内で実行される 実行されるsession_write_close() または session_destroy() が完了または呼び出されたとき、つまり、すべてのセッション操作が完了した後に実行されます
array(&$this, 'read'), // session_start() の実行時に実行されます。現在のセッション データ
array(&$this, 'write'), //スクリプトの終了時にこのメソッドが実行され、session_write_close() が SESSION データの送信を強制するために使用されます
array(&$this, 'destroy') , // session_destroy() の実行時に実行されます
array(&$this, 'gc') // 実行確率は session.gc_probability と session.gc_divisor の値によって決まります タイミングは open, read 後です。 、 session_start は open、read、gc を実行します
session_start(); '/([a-zA-Z_x7f -xff][a-zA] -Z0-9_x7f-xff]*)|/',
for ( $i = 0; isset($vars[$i] ); $i++) {
$result[$vars[$i++]] = unserialize($vars[$i]);
を使用してusing using using using using through through through out through through through through through through over through Over's'' ''' -through'-' ‐‐‐‐‐‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ SELECT uid FROM sessions where session_id = '"。$ sessionkey。"' limit 1 ";
function write($SessionKey,$VArray) {
require_once(MRoot.DIR_WS_CLASSES .'db_mysql_class.php');
$db1=new DbCom();
// 今すぐデータベースに接続します
$db1 ->connect(DB_SERVER, DB_SERVER_USERNAME, DB_SERVER_PASSWORD, DB_DATABASE);
$db1->query("set names utf8");
$this->db=$db1;
$SessionArray = addlashes($VArray) ;
$data=$this->unserializes($VArray);  
$sql0 = "SELECT uid FROM セッション WHERE session_id = '".$SessionKey."' 制限 1";
$query0 =$this->db->query($sql0);
if($this->db->num_rows($query0)<=0){
if (isset($data[ 'webid']) && !empty($data['webid'])) {
$this->db->query("insert into `sessions` set `session_id` = '$SessionKey',uid=' ".$data['webid']."',last_visit='".time()."'");
}
return true;
}else{
/*$sql = " 「セッション」セット」 ;
if(isset($data['webid'])){
$sql .= "uid = '".$data['webid']."', " ;
}
$sql.="`last_visそれは= null "
. "ここで `session_id` = '$SessionKey'";
$this->db->query($sql); */
true を返します。
}
}
function destroy($SessionKey) {
$this->db->query("delete from `sessions` where `session_id` = '$SessionKey'");
true を返します。
}
function gc($lifetime) {
$this->db->query("delete from `sessions` where unix_timestamp(now()) -`last_visit` > '".$this->lasttime ."'");
return true;
}
}
?>

下面是php.ini中session的配置说明:
session.save_handler = "files"
 存储和检索与会话关联的数据的处理器名字。默认为文件("files")。
 如果想要使用自定义的处理器(如基于数据库的处理器),可用"user"。
 有一个使用PostgreSQL的处理器:http://sourceforge.net/projects/phpform-ext/

session.save_path = "/tmp"
 传递给存储处理器的参数。对于files处理器,此值是创建会话数据文件的路径。
 Windows下默认为临时文件夹路径。
 你可以使用"N[MODE]/path"这样模式定义该路径(N是一个整数)。
 N表示使用N层深度的子目录,而不是将所有数据文件都保存在一个目录下。
 [MODE]可选,必须使用8进制数,默认600(=384),表示每个目录下最多保存的会话文件数量。
 这是一个提高大量会话性能的好主意。
 注意0: "N[MODE]/path"两边的双引号不能省略。
 注意1: [MODE]并不会改写进程的umask。
 注意2: php不会自动创建这些文件夹结构。请使用ext/session目录下的mod_files.sh脚本创建。
 注意3: 如果该文件夹可以被不安全的用户访问(比如默认的"/tmp"),那么将会带来安全漏洞。
 注意4: 当N>0时自动垃圾回收将会失效,具体参见下面有关垃圾搜集的部分。

session.name = "PHPSESSID"
用在cookie里的会话ID标识名,只能包含字母和数字。

session.auto_start = Off
 在客户访问任何页面时都自动初始化会话,默认禁止。
 因为类定义必须在会话启动之前被载入,所以若打开这个选项,你就不能在会话中存放对象。

session.serialize_handler = "php"
 用来序列化/解序列化数据的处理器,php是标准序列化/解序列化处理器。
 另外还可以使用"php_binary"。当启用了WDDX支持以后,将只能使用"wddx"。

session.gc_probability = 1
session.gc_divisor = 100
 定义在每次初始化会话时,启动垃圾回收程序的概率。
 这个收集概率计算公式如下:session.gc_probability/session.gc_divisor
 对会话页面访问越频繁,概率就应当越小。建议值为1/1000~5000。

session.gc_maxlifetime = 1440
 超过此参数所指的秒数后,保存的数据将被视为'垃圾'并由垃圾回收程序清理。
 判断标准是最后访问数据的时间(对于FAT文件系统是最后刷新数据的时间)。
 如果多个脚本共享同一个session.save_path目录但session.gc_maxlifetime不同,
 那么将以所有session.gc_maxlifetime指令中的最小值为准。
 如果使用多层子目录来存储数据文件,垃圾回收程序不会自动启动。
 你必须使用一个你自己编写的shell脚本、cron项或者其他办法来执行垃圾搜集。
 比如,下面的脚本相当于设置了"session.gc_maxlifetime=1440" (24分钟):
 cd /path/to/sessions find -cmin +24 | xargs rm

session.referer_check =
 如果请求头中的"Referer"字段不包含此处指定的字符串则会话ID将被视为无效。
 注意:如果请求头中根本不存在"Referer"字段的话,会话ID将仍将被视为有效。
 默认为空,即不做检查(全部视为有效)。

session.entropy_file = "/dev/urandom"
 附加的用于创建会话ID的外部高熵值资源(文件),
 例如UNIX系统上的"/dev/random"或"/dev/urandom"

session.entropy_length = 0
 从高熵值资源中读取的字节数(建议值:16)。

session.use_cookies = On
 是否使用cookie在客户端保存会话ID

session.use_only_cookies = Off
 是否仅仅使用cookie在客户端保存会话ID
 打开这个选项可以避免使用URL传递会话带来的安全问题。
 但是禁用Cookie的客户端将使会话无法工作。

session.cookie_lifetime = 0
 传递会话ID的Cookie有效期(秒),0 表示仅在浏览器打开期间有效。

session.cookie_path = "/"
 传递会话ID的Cookie作用路径。

session.cookie_domain =
セッションIDのCookieスコープを渡します。
デフォルトは空で、Cookie 仕様に従って生成されたホスト名を示します。

session.cookie_secure = Off
安全な接続 (https) 経由でのみ Cookie を送信するかどうか。

session.cookie_httponly = Off
Cookie に httpOnly フラグを追加するかどうか (HTTP プロトコル アクセスのみが許可されます)、
これにより、クライアント スクリプト (JavaScript など) が Cookie にアクセスできなくなります。
このコマンドを有効にすると、XSS 攻撃によるセッション ID ハイジャックを効果的に防ぐことができます。

session.cache_limiter = "nocache"
セッション ページのキャッシュ制御モードを指定するには、{nocache|private|public} に設定します。
、http 応答ヘッダーでキャッシュが無効なコマンドが送信されないようにするには、空に設定します。

session.cache_expire = 180
クライアントキャッシュにおけるセッションページの有効期間(分)を指定します
session.cache_limiter=nocacheの場合、本設定は無効となります。

session.use_trans_sid = Off
URL に SID (セッション ID) を表示するためにクリアコードを使用するかどうか。
ユーザーにセキュリティ リスクをもたらすため、デフォルトで禁止されています:
1- ユーザーは、電子メール/irc/QQ/MSN... を通じて有効な SID を含む URL を他の人に伝える可能性があります。
2- 有効な SID を含む URL は公共のコンピューターに保存される場合があります。
3- ユーザーは固定 SID を持つ URL をお気に入りまたは閲覧履歴に保存できます。
URL ベースのセッション管理には、Cookie ベースのセッション管理よりも常に大きなリスクが伴うため、無効にする必要があります。

session.bug_compat_42 = On
session.bug_compat_warn = On
PHP4.2 より前のバージョンには、未指定の「バグ」があります:
register_globals=Off の場合でもグローバル セッション変数の初期化を許可します。
PHP でこの機能を使用する場合、 4.3以降では警告が表示されます。
この「バグ」を閉じて警告を表示することをお勧めします。

session.hash_function = 0
SID を生成するためのハッシュ アルゴリズム。 SHA-1 の方が安全です
0: MD5 (128 ビット)
1: SHA-1 (160 ビット)
SHA-1 の使用を推奨します。

session.hash_bits_per_character = 4
SID 文字列の各文字に保存されるビット数を指定します。
これらの 2 進数はハッシュ関数の結果です。
4: 0-9、a-f
5: 0-9、a-v
6: 0-9、a-z、A-Z、"-"、","
推奨値は5です

url_rewriter.tags = "a=href,area=href,frame=src,form=,fieldset="
このコマンドは PHP のコア部分に属し、Session モジュールには属しません。
SID を含めるように書き換える HTML タグを指定します (session.use_trans_sid=On の場合のみ有効)
フォームとフィールドセットは特別です:
これらを含めると、URL リライターは非表示の " " を追加します。 URL に追加する必要がある追加情報が含まれています。
XHTML 標準に準拠したい場合は、フォーム項目を削除し、フォーム フィールドの前後に

タグを追加してください。
注: すべての法的項目には等号が必要です (その後に値がない場合でも)。
推奨値は「a=href、area=href、frame=src、input=src、form=fakeentry」です。

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/327928.html技術記事次のようにコードをコピーします: ?php /*============================ファイルの説明========== == ============================= @filename: session.class.php @description: データベースをオンラインで保存します...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。