51

今日、私はPHP開発者としての仕事のためにスカイプのインタビューを受けました。質問の1つは、CookieとPHPセッションについてでした。

問題は、ユーザーのブラウザでCookieが無効になっている場合、PHPセッションを設定して読み取り、使用できるかということでした。

PHPセッションはデフォルトでセッションCookieの設定に依存しているため、私は彼らに言わなかった。PHPセッションが開始されると、新しいセッションCookieがデフォルト名PHPSESSIDで設定され、そのCookieはそのセッションIDの値を保持します。たとえば次のようになります。 :test1 | s:12: "SessionTest1"; test2 | s:12: "SessionTest2";

彼らはそれは真実ではなく、ユーザーが自分のブラウザでCookieを無効にしてもPHPセッションを使用できると私に言いました。

それから私はあなたがそれをすることができると彼らに言いました、しかしそれからセッションIDはGET変数としてURLを通して渡されるでしょう。これは安全ではないため、php.iniで設定する必要があります。

彼らは、ブラウザでCookieが無効になっている場合でもPHPセッションを使用する方法について話していました。そして、私たちがWebショップを構築していて、一部のおばあちゃんが私たちのWebショップを使用して、Cookieを無効にし、彼女が気にしない場合はどうでしょうか。そして、そのPHPセッションは、ユーザーがCookieを無効にしても使用できるため、優れています。私はwtf、wtf wtfのようでしたか?!?!

2つのファイルでテストを行いました。index.phpはセッションを開始し、セッション変数を設定します。そして、session.phpはそのセッション変数を読み取ろうとします。

これはそれがどのように見えるかです:

index.php

<p>This is where I start and set php sessions.</p>

<?php

    session_start();
    $_SESSION['test1'] = "SessionTest1";
    $_SESSION['test2'] = "SessionTest2";

?>

<p>This is a link, that starts new HTTP Request, and tries to read session set on this page:</p>
<p><a href="session.php">Read Session</a></p>

session.php

<?php

    session_start();
    var_export($_SESSION);

?>

<p><a href="index.php">Back</a></p>

これで、ブラウザでCookieを有効にし、index.phpにアクセスし、session.phpにアクセスすると、セッションが出力されます。

しかし、ブラウザの履歴とCookieをクリアしてから、index.phpにアクセスしてから、session.phpにアクセスすると、空の配列が表示されます。

だから基本的に私の質問は、私は正しいですか?ブラウザでCookieを無効にした場合、PHPセッションを使用できますか?また、PHPセッションメカニズムはデフォルトで、セッションCOOKIEの設定に依存しますか?

更新:私はこれに腹を立てていたので、話していた人に電話をかけ直しました。そして彼に尋ねた、PHPセッションはデフォルトでCookieなしで動作することができますか?男は「はい」と言った。それから私は彼に彼が間違っていると言いました、そして彼は言いました:「はい、はい、あなたがそう言うなら...」そして笑い始めます。それから私は彼に言った、もしPHPセッションがクッキーを設定しなくても機能するなら、サーバーはセッションクッキーに保存されていない場合、現在のユーザー/ブラウザのセッションIDをどのように知るのだろうか?(セッションIDをGET変数として渡すことができることを彼が知っているかどうかを確認したかった)そして彼は少なくとも20秒間静かで、彼はシステム管理者であり、開発者の人に聞いてみるべきだと言った。そして、彼は43歳で、ビジネスで13年の豊富な経験を持っています(彼は30?wtf?から始めました)が、彼はこれについて私を信頼しています。

つまり、基本的に、その男はPHPとPHPセッションについての手がかりを持っていませんでした、そしてはい、彼は私が彼にそれができないと言ったとしても、PHPセッションはクッキーなしで動作することができると私に言ったセッションについて私に尋ねた人でしたCookieなしでPHPセッションを使用する方法はありますが、デフォルトでは機能しません。彼は、いやいやいや...最後に、サーバーのシステム管理者としてtmpフォルダー内のセッションを表示できないため、Cookieがなくてもセッションが機能すると考えていると私に言いました。

とにかく、それらの人はPHPに夢中です、私が彼らからの求人を受け入れる方法はありません、そして結局のところ、私は彼らがとにかく私に仕事を提供するとは思わない...

すべてのコメントをありがとう!

4

9 に答える 9

27

「Webサイトにアクセスする訪問者には、一意のID、いわゆるセッションIDが割り当てられます。これは、ユーザー側のCookieに保存されるか、URLに伝播されます。」

セッション:はじめに

于 2012-09-24T20:14:01.630 に答える
9

session.use_cookies = 1(Cookieが有効)の場合。

session.use_cookies = 0(Cookieが無効)の場合。

session.use_cookies = 1の場合、sessionはsessionIdをcookieに保存します。session_id()を呼び出すと、Cookieから保存されたsessionIdが取得され、セッション配列に保存されたデータがすべてのページに表示されます。session.use_cookies = 0の場合この場合、セッションはsessionIdをCookieに保存せず、session_id()を使用して新しいsessionIdを取得し、他のページでセッションに保存されたデータが別のページで見つからないたびに取得します。

于 2013-07-25T05:13:54.227 に答える
5

だから基本的に私の質問は、私は正しいですか?

多くの場合。現実の世界では:はい

ブラウザでCookieを無効にした場合、PHPセッションを使用できますか?

ブラウザIDが何らかの方法で取得され、一意の値が生成される(そしてこの値がPHPセッション層に渡される)限り、 CookieなしでPHPセッションを使用できます。

  • GETのセッションID(Cookieが許可されていない場合の「標準」のPHPの方法、および説明した「その他の」方法)。この値は、PHPによって自動的に伝播されます。たとえば、すべてのAHREFに追加されます。自動リンク認識が失敗したために伝播されない場合(たとえば、Javascriptで構築された複雑なURL)、それに応じて提供するのはユーザーの責任です。

または-そしてここで私たちはもうカンザスにいません:

  • Auth Digestを使用してナンス間で渡されます(これは汚いトリックであり、もちろんサイト全体がAuth-Digestアクセス認証スキームの背後にある必要があります。「ダミー認証」(つまりhttp://welcome)は使用できなくなります。:guest@www.example.com)Internet Explorerなどの一部のブラウザは、セキュリティ上の理由からサポートされなくなったため)
  • ブラウザを他の方法で認識する(「指紋」)(これは通常(1)自殺です
  • LSO(ローカル共有オブジェクト)を使用して、ランダムなUUIDがまだ存在しない場合は生成し、後続のアクセスで取得できるように保存します。
  • 他の方法(http://en.wikipedia.org/wiki/Evercookieを参照)

(1)IPを信頼できるLANにいる場合は、「セッション」をユーザーIPに関連付けることができます。小規模な会社では厳密な「Cookieなし」ポリシーを適用しても、セッションIDに_GET/_POSTを使用せずにユーザーセッションを維持することができます。

于 2012-09-24T20:14:08.910 に答える
5

はい、Cookieが無効になっている場合はセッションが機能します。ただし、最初にapacheでphp構成設定を確認してください。好き:

   --enable-trans-sid
and
   --enable-track-vars

これらの値がtrueに設定されている場合、セッションはPOSTによって自動的に渡されます。

「--enable-trans-sid」および「--enable-track-vars」の値がFALSEに設定されている場合、SID定数を使用してセッションIDを渡す必要があります。

< a href="index.php?<?= SID ?>" >Navigate from here< /a >

php.iniを設定する必要があります

ini_set("session.use_cookies", 0);
ini_set("session.use_trans_sid", 1);
于 2014-09-04T14:18:23.470 に答える
2

そうです、SessionはCookieなしでは機能しません。これを説明するために、次のアクションを実行してみてください。

  1. Gmailにログインします。
  2. ログイン後、Cookieを無効にしました。
  3. ページを更新。

サーバーがセッションを識別できないため、ログインページに再度リダイレクトされます。

  1. ここで、Cookieを再度有効にします。
  2. ページを更新。(注:ログインボタンをクリックしないでください)。
  3. Gmailの受信トレイに自動的にリダイレクトされます。

したがって、Cookieがないとセッションは機能しないと言えます。

また、無効にしたCookieを使用してGmailにログインしようとすると(例として、任意のWebサイトを利用できます)、「ブラウザでCookieが無効になっています。Cookieが有効になっていることを確認してから再試行してください」というメッセージが表示されます。

于 2018-08-14T18:26:57.267 に答える
0

私なら「はい」と言います

セッションをform/urlのどこかに保存して、次のページに渡すことができるので(非常に悪い考えです)。それで、彼の質問に基づいて、「ユーザーのブラウザでCookieが無効になっている場合、PHPセッションを設定して読み取り、使用できますか?」

次に、それはイエスでなければなりません。読み取って使用できます。

ただし、ユーザーがブラウザを閉じると、それはなくなり、それだけです。(その男はこの部分について尋ねなかったので)

于 2016-02-28T10:56:06.107 に答える
0

はい..
動作します1.PHPは、PHPSESSIDという名前のURLで1つのGETパラメーターを渡しますが、php.iniファイルでsession.nameを変更できます。
2.同じ名前のフォームに1つの非表示の入力を追加します。

于 2017-09-19T07:13:49.710 に答える
0

URLにセッションIDを入力する必要があります。php.iniファイルに変更を加える必要があるため、共有ホストを使用している場合は、共有ホストに連絡して、それらがどのように機能するかを確認する必要があります。

于 2018-06-17T15:04:39.950 に答える
0

//セッションからCookieを使用することをPHPに通知します

 ini_set('session.use_cookies', '0');
 ini_set('session.use_only_cookies', '0');
 ini_set('session.use_trans_sid','1');
 session_start();

//次に、URLでセッションIDを渡します(セッションIDのヘッダーに表示されるページを調べ、ネットワークを更新して更新します)

于 2020-01-16T15:42:12.720 に答える