ホームページ php教程 php手册 PHP チュートリアル: COOKIE と SESSION を組み合わせてクロスドメインを実現する

PHP チュートリアル: COOKIE と SESSION を組み合わせてクロスドメインを実現する

Jun 21, 2016 am 08:56 AM
cookie session the

SESSION がドメインを越えることができないことは誰もが知っています。つまり、ドメイン A.WEMVC.COM の実行可能ファイルは B.WEMVC.COM の SESSION にアクセスできません。これは SESSION の機能であり、これはセキュリティの観点から言えば当てはまります。
通常の状況では、Web サイトのドメイン名は 1 つだけですが、一部の Web サイト構造は複数のサブドメイン名で構成されているため、SESSION はサブドメイン間でアクセスできる必要があります。これにより、ユーザーのクロスドメイン ログインが可能になります。つまり、顧客が A でログインすると、同時に B もログインする必要がなくなります。もちろん、クロスドメインではない SESSION 自体でもこれを行うことができます。もちろん、クロスドメインの後の SESSION についてはどうなるでしょうか。 、あなたもクロスドメイン SESSION について心配していて、この記事を見つけたかもしれません。おめでとうございます。今日のコースを始めましょう。SESSION を実現するには、COOKIE と SESSION を併用します。

まず、PHP の COOKIE と SESSION を確認してみましょう:

COOKIE:
定義:
Cookie はユーザーを識別するためによく使用されます。 Cookie は、サーバーがユーザーのコンピュータ上に残す小さなファイルです。同じコンピュータがブラウザを通じてページをリクエストするたびに、Cookie も送信されます。 PHP を使用すると、Cookie 値を作成および取得できます。 PS: 中国語名は「Cookie」です。
COOKIE を設定するには、PHP の setCookie 関数を使用します。この関数には、合計 7 つのパラメータがあります。は 6 です。申し訳ありませんが、同時に、PHP5.2.0 バージョンでは 7 つのパラメータに増加しました。)、これらの 7 つのパラメータは文字列 $ です。 name [, string $value [, int $expire [, string $path [, string $domain [, bool $secure [, bool $httponly ]]]]]] .
name Cookie の名前を指定します。クッキーの名前。
value この値はクライアントのコンピューターに保存されます。name は 'cookiename' です。この値は $_COOKIE['cookiename'] を通じて取得されます。Cookie の値を指定します。
expire これは Unix タイムスタンプなので、エポックからの秒数です。つまり、これを設定する可能性が高くなります。 time() 関数に有効期限が切れるまでの秒数を加えます。または、mktime() を使用することもできます。time()+60*60*24*30 は、Cookie が 30 日で期限切れになるように設定します。0 に設定するか省略した場合、Cookie はセッションの終了時 (ブラウザーが閉じたとき) に期限切れになります。

: expire パラメータは、日付形式 Wdy, DD-Mon- ではなく、Unix タイムスタンプを使用していることに気づくかもしれません。 YYYY HH:MM:SS GMT、これは、PHP がこの変換を内部で行うためです。
expire は、サーバーの時間とは異なる可能性があるクライアントの時間と比較されます。

path Cookie が使用できるサーバー上のパス。 ‘/’ に設定すると、Cookie は ドメイン 全体内で使用可能になります。 '/foo/' に設定すると、Cookie は /foo/ ディレクトリと、/foo/bar/ の ドメイン 。デフォルト値は、Cookie が設定されている現在のディレクトリです。Cookie のサーバー経路径を定義します。
domain Cookie が使用できるドメイン。 example.com のすべてのサブドメインで Cookie を利用できるようにするには、Cookie を ‘.example.com’ に設定します。 . は必須ではありませんが、より多くのブラウザーと互換性があります。 www.example.com に設定すると、Cookie は www サブドメインでのみ使用可能になります。詳細については、» 仕様 の末尾マッチングを参照してください。 Cookie のドメイン名を定義します。クライアントからの接続。
TRUE に設定すると、安全な接続が存在する場合にのみ Cookie が設定されます。デフォルトは FALSE です。サーバー側では、この種の Cookie を安全な接続でのみ送信するのはプログラマの役割です (例: $_SERVER["HTTPS"] に関して)。 httponly
TRUE の場合、Cookie は HTTP プロトコル経由でのみアクセス可能になります。これは、JavaScript などのスクリプト言語から Cookie にアクセスできないことを意味します。この設定は、XSS 攻撃による個人情報の盗難を効果的に減らすのに役立ちます (ただし、すべてのブラウザーでサポートされているわけではありません)。 PHP 5.2.0で追加されました。 TRUE または FALSE。规定かどうかは必ず通過HTTP协议来定义访问COOKIE、防止XSS攻撃击.SESSION全面教程SESSION在这里就不过多的讲解了,主是:

  • session_cache_expire — 現在のキャッシュの有効期限を返す
  • session_cache_limiter — 現在のキャッシュ リミッターを取得および/または設定します
  • session_commit — session_write_close
  • のエイリアス
  • session_decode — 文字列
  • からセッション データをデコードします
  • session_destroy — セッションに登録されているすべてのデータを破棄します
  • session_encode — 現在のセッション データを文字列
  • としてエンコードします
  • session_get_cookie_params — セッション Cookie パラメーターを取得します
  • session_id — 現在のセッション ID を取得および/または設定します
  • session_is_registered — グローバル変数がセッションに登録されているかどうかを確認します
  • session_module_name — 現在のセッション モジュールを取得および/または設定します
  • session_name — 現在のセッション名を取得および/または設定します
  • session_regenerate_id — 現在のセッション ID を新しく生成された ID で更新します
  • session_register — 現在のセッションに 1 つ以上のグローバル変数を登録します
  • session_save_path — 現在のセッションの保存パスを取得および/または設定します
  • session_set_cookie_params — セッション Cookie パラメータを設定します
  • session_set_save_handler — ユーザーレベルのセッションストレージ関数を設定します
  • session_start — セッション データを初期化します
  • session_unregister — 現在のセッションからグローバル変数の登録を解除します
  • session_unset — すべてのセッション変数を解放します
  • session_write_close — セッション データを書き込み、セッションを終了します
哈哈,不是我懒噢,这里只讲跨域.
OK,大概温习了下COOKIEとSESSION,开始实现我们的跨域.
首先我描述下我的思路,COOKIE可指定領域名,也例:setcookie('name','joshua',time()+3600*24,'/','wemvc.com'),那么A.wemvc.com,B.wemvc .com都可$_COOKIE['name']、すべて'joshua'.同理、SESSION IDもこのドメイン名に設定でき、那么A.wemvc.comとB.wemvc.com都が同じを取得できます。 1 つの SESSION ID、那么我们の目的は達成されました。同じ SESSION ID を知っているため、この SESSION 内の制限にアクセスできます。SESSION にはさまざまな方法で保存されており、テキスト パケット内に保存されているなど、データ ソースが保存されています。 A.wemvc.com、B.wemvc.com は同じ台のサーバー上に存在せず、那么内に保存されるファイルの保存方法は、完全にフィールドを超えて、最後まで方法がなく、本人も何も説明しません。
最初にデータベースにあります。中创建一セッション表:
CREATE TABLE `sessions` (
`sid` varchar(32) NOT NULL デフォルト '',
`expiry` int(20) unsigned NOT NULL デフォルト ' 0',
`value` テキスト NOT NULL,
PRIMARY KEY (`sid`),
KEY `expiry` (`expiry`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

その後、一のクラスを書き込み、このクラスは取取入力更新および垃圾回收SESSION
class session{
private $db;
function __construct($db) {
$this->db=$db;
}
public function open($save_path,$session_name){
return true;
}
public function close() {
$this->db=null;
return true;
}
public function read($sid){
$rs=$this->db->query ("sid='".$sid."'" のセッションから * を選択);
foreach ($rs as $row){
return $row['value'];
}
return null;
}
public function write($sid,$value){
if(is_null($oldvalue=$this->read($sid))){
// insert
return $this->db->query(”セッションに挿入 (sid,expiry,value)values('”.$sid.”','”.time().”','” .$value.”')”);
}else{
//update
return $this->db->query(”更新セッション set expiry='”.time(). ”',value='”.$value.”' where sid='”.$sid.”'”);
}
}
public function destroy($sid){
return $this->db->query(”sid='”.$sid.”'”のセッションから削除);
}
public function gc($max_life_time){
return $this ->db->query('expiry+'.$max_life_time.'<'.time());
}
}

我来解释下这个类:
private $db; クラスの DATABASE 属性。
function __construct($db) クラスを宣言するときに、クラスに DB 属性を直接渡すこともできます。理解してください。最初に GOOGLE で「PHP クラス コンストラクト」メソッドを実行できます。
public function open($save_path,$session_name) セッションが開かれます。特別なことは必要ありません。直接 TRUE を返します。
public function close() session close は open と同じですが、DB 接続を閉じることに注意してください。
public function read($sid) セッションは読み取り、値 SID を渡し、この SID の VALUE を戻り値としてデータ テーブルに返します。 ;
public function write($sid,$value) セッションの書き込みと更新、なぜ expiry='".time()."' を設定するのかという疑問が生じるでしょう。答えは、期限切れのクリアで後で明らかになります。 SESSION GC メソッド;
public function destroy($sid) セッションの破棄は非常に簡単で、データ テーブル内のこの SID に等しいデータを削除するだけです。
public function gc($max_life_time) は期限切れのセッションをクリアします。 max_life_time を超えるすべての SESSION を破棄します。つまり、SESSION の作成時間と最大生存時間の合計が時間 (expiry+'.$max_life_time.'<'.time()) よりも小さい SESSION データが削除されます。 SESSION の記述と更新のメソッドに現在時刻が記述される理由は理解できます。もちろん、この記述方法は絶対に必要ではありません。SQL が正しく記述されている限り、それはあなた次第です。
それでは、次に進みます。さらに重要な部分:
上記のクラスにはデータベース リンク属性が必要なので、オブジェクトを宣言するときは次のようにする必要があります:
$session=new session(your db connectadapter);
データベース リンク PDO メソッドを提供できます。参照してください:
function connect_db( $arrPDODB){
$db=new PDO($arrPDODB['db_driver'].': host='.$arrPDODB['db_host'].';dbname='.$arrPDODB['db_name'],$ arrPDODB['db_user'],$arrPDODB['db_password']);
$db-> ;query("set names 'utf8''");
return $db;
}

したがって、オブジェクト宣言部分は次のように書くことができます:
$session=new session(connect_db($arrPDODB));
Next:
//カラーセッションIDの名前を設定します
ini_set('session.name', 'sid ');
//GET/POST 変数メソッドを使用しない
ini_set('session.use_trans_sid', 0);
//ガベージ コレクションの最大有効期間を設定します
ini_set('session. gc_maxlifetime', 3600);
//COOKIE を使用してセッション ID を保存します
ini_set('session.use_cookies', 1) ;
ini_set('session.cookie_path', '/');
//複数のホストが SESSION ID を保存する COOKIE を共有します。ここでのドメイン名は第 1 レベルのドメイン名であることに注意してください。
ini_set('session.cookie_domain', '
wemvc.com');
//デフォルトのファイルではなく session.save_handler を user に設定します
session_module_name('user');
session_set_save_handler(array($session ,'open'),
array($session,' close')、
array($session,'read')、
array($session,'write')、
array( $session,'destroy')、
array($session ,'gc'));

上記は SESSION の設定です。理解できない場合は、マニュアルを検索して学習してください。それについて少し知っているだけで理解した、またはマスターしたと考えるのではなく、知識ポイントを徹底的に理解します。
最後に、必要な場所でセッションを開始します。
session_start( ; そして開始します。もちろん、このプログラムはドメインをまたぐこともできます (笑)。次の ブログ投稿
を書く前に、自分で勉強してみてください。実際、AJAX はサブドメインをまたぐこともできます。これが私の次の
ブログ投稿への道を開きました。笑、皆さんも私と議論して学んでください。2008 年 9 月更新。 26 日:
新しいデモ プログラムが追加されました。プログラムは非常にシンプルで、初心者の学習に適しています。demo_session_1プログラムの説明: 2 つのフォルダー a と b は、仮想マシンを a.yourdomain.com と b.yourdomain.com に設定するだけです。まずこれを理解してから、セッションをデータベースに保存することを検討してください。セッションをデータベースに保存する主な理由は、Web サイトに複数のサーバーがある場合、セッションがデフォルトのファイル タイプで保存されたままだと、複数のサーバーが機能しないためです。
demo_session 2

プログラム説明: このプログラムは、ウェアハウジング機能、データテーブルの作成、および上記のファイルを追加します。


このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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)

コンピューター上の Cookie はどこにありますか? コンピューター上の Cookie はどこにありますか? Dec 22, 2023 pm 03:46 PM

コンピュータ上の Cookie は、使用するブラウザとオペレーティング システムに応じて、ブラウザ上の特定の場所に保存されます。 1. Google Chrome、C:\Users\YourUsername\AppData\Local\Google\Chrome\User Data\Default \Cookies に保存されます。等

Cookie はどこに保存されますか? Cookie はどこに保存されますか? Dec 20, 2023 pm 03:07 PM

Cookie は通常、ブラウザの Cookie フォルダに保存されます。ブラウザの Cookie ファイルは通常、バイナリ形式または SQLite 形式で保存されます。Cookie ファイルを直接開くと、文字化けしたり判読できないコンテンツが表示される可能性があるため、使用することをお勧めします。 Cookie を表示および管理するためにブラウザによって提供される Cookie 管理インターフェイス。

2か月後、人型ロボットWalker Sが服をたたむことができるようになった 2か月後、人型ロボットWalker Sが服をたたむことができるようになった Apr 03, 2024 am 08:01 AM

Machine Power Report 編集者: Wu Xin 国内版の人型ロボット + 大型模型チームは、衣服を折りたたむなどの複雑で柔軟な素材の操作タスクを初めて完了しました。 OpenAIのマルチモーダル大規模モデルを統合したFigure01の公開により、国内同業者の関連動向が注目を集めている。つい昨日、中国の「ヒューマノイドロボットのナンバーワン株」であるUBTECHは、Baidu Wenxinの大型モデルと深く統合されたヒューマノイドロボットWalkerSの最初のデモを公開し、いくつかの興味深い新機能を示した。 Baidu Wenxin の大規模モデル機能の恩恵を受けた WalkerS は次のようになります。 Figure01 と同様に、WalkerS は動き回るのではなく、机の後ろに立って一連のタスクを完了します。人間の命令に従って服をたたむことができる

セッション失敗を解決する方法 セッション失敗を解決する方法 Oct 18, 2023 pm 05:19 PM

セッション障害は通常、セッションの有効期間の期限切れまたはサーバーのシャットダウンによって発生します。解決策: 1. セッションの有効期間を延長する; 2. 永続ストレージを使用する; 3. Cookie を使用する; 4. セッションを非同期的に更新する; 5. セッション管理ミドルウェアを使用する。

PHP セッションのクロスドメイン問題の解決策 PHP セッションのクロスドメイン問題の解決策 Oct 12, 2023 pm 03:00 PM

PHPSession のクロスドメイン問題の解決策 フロントエンドとバックエンドの分離の開発では、クロスドメイン要求が標準になっています。クロスドメインの問題に対処するときは、通常、セッションの使用と管理が必要になります。ただし、ブラウザーのオリジンポリシーの制限により、デフォルトではセッションをドメイン間で共有できません。この問題を解決するには、いくつかの技術と方法を使用して、セッションのクロスドメイン共有を実現する必要があります。 1. ドメイン間でセッションを共有するための Cookie の最も一般的な使用法

モバイル Cookie はどこにありますか? モバイル Cookie はどこにありますか? Dec 22, 2023 pm 03:40 PM

携帯電話上の Cookie は、モバイル デバイスのブラウザ アプリケーションに保存されます: 1. iOS デバイスでは、Cookie は Safari ブラウザの [設定] -> Safari -> [詳細] -> [Web サイト データ] に保存されます; 2. Android デバイスでは、Cookie は保存されますChromeブラウザの設定→サイト設定→Cookieなど

ブラウザの Cookie が保存される場所の詳細な説明 ブラウザの Cookie が保存される場所の詳細な説明 Jan 19, 2024 am 09:15 AM

インターネットの普及により、ブラウザを使用してインターネットを閲覧することが生活様式になりました。ブラウザを日常的に使用する中で、オンラインショッピング、ソーシャルネットワーキング、電子メールなど、アカウントのパスワードを入力する必要がある場面に遭遇することがよくあります。この情報は、次回アクセスするときに再度入力する必要がないようにブラウザによって記録される必要がありますが、このような場合に Cookie が役に立ちます。クッキーとは何ですか? Cookie とは、サーバーからユーザーのブラウザに送信され、ローカルに保存される小さなデータ ファイルを指し、一部の Web サイトでのユーザーの行動が含まれています。

Cookie をクリアすると何か影響がありますか? Cookie をクリアすると何か影響がありますか? Sep 20, 2023 pm 06:01 PM

Cookie をクリアすると、パーソナライズ設定と環境設定のリセット、広告エクスペリエンスへの影響、ログイン ステータスとパスワードの記憶機能の破壊などの影響が生じます。詳細な紹介: 1. 個人設定と環境設定をリセットします。Cookie をクリアすると、ショッピング カートが空にリセットされ、商品を再度追加する必要があります。Cookie をクリアすると、ソーシャル メディア プラットフォームでのログイン ステータスも失われるため、再追加. ユーザー名とパスワードを入力してください; 2. 広告エクスペリエンスに影響します. Cookie をクリアすると、Web サイトは私たちの興味や好みを理解できなくなり、無関係な広告などが表示されます。

See all articles