web-dev-qa-db-ja.com

PHP Cookieが無効になっているセッション、動作しますか?

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

問題は、PHPセッションを設定および読み取り、ユーザーブラウザーでCookieが無効になっている場合に使用できますか?

Beacuse PHPセッションはデフォルトでセッションCookieの設定に依存します。PHPセッションが開始されると、新しいセッションCookieはデフォルト名PHPSESSIDで設定されます。 CookieはそのセッションIDの値を保持します。例:ftu63d8al491s5gatuobj39gk7次に、Apacheサーバーでtmpフォルダーファイルsess_ftu63d8al491s5gatuobj39gk7が作成され、そのセッションのコンテンツが保持されます。例:test1 | s:12: "SessionTest1"; test2 | s: 12: "SessionTest2";

彼らは私に、それは真実ではなく、ユーザーがブラウザでクッキーを無効にしてもPHP Sessionsを使用できると言った。

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

彼らは、ブラウザでCookieが無効になっている場合でもPHP Sessionsを使用する方法を話していました。そして、Webショップを構築している場合、気をつけてください。そして、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セッションがCookieを設定せずに機能する場合、セッションCookieに保存されていない場合、サーバーは現在のユーザー/ブラウザセッションIDをどのように知るか(セッションIDをGET変数として渡すことができることを彼が知っているかどうかを確認したかった)そして、彼は少なくとも20秒間静かで、彼がシステム管理者であり、開発者に尋ねるべきだと言った。彼は43歳で、ビジネスで13年の膨大な経験があります(30?wtf?で始めました)が、この1つに私を信頼しています。セッションIDはGET変数として渡され、インタビューでそのことを伝えましたが、彼らは私にノー、ノーノーと言っています...:S

基本的に、この男はPHPおよびPHPセッションについての手がかりがありませんでした。 PHPセッションはcookieなしで機能することができます。私はそれができないと彼に言ったときでさえ、そして使用する方法がありますPHP彼は、サーバーのシステム管理者としてtmpフォルダーのセッションを見ることはできないので、セッションはCookieなしで機能すると考えていると言っていました。 ?!?

とにかく、それらの人はPHPを嫌いです、私は彼らからの仕事のオファーを受け入れる方法はありません、そして、この後、私は彼らがとにかく私に仕事を提供するとは思わない...

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

43
Limeni

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

セッション:はじめに

26
user557846

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の場合この場合、セッションはcookieにsessionIdを保存せず、session_id()を使用して新しいsessionIdを取得するたびに、他のページのセッションに保存されたデータは別のページで見つかりません。

8
Ranjan

はい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);
5
Pankaj Chauhan

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

主に。現実の世界では:[〜#〜] yes [〜#〜]

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

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

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

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

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

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

5
LSerni

クッキーがないとセッションは機能しません。これを説明するために、次のアクションを実行してみてください。

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

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

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

したがって、Cookieなしではセッションは機能しません。

また、無効化されたCookieを使用してGmailにログインしようとしている場合(例として、任意のWebサイトを取得できます)、「ブラウザのCookieが無効になっています。Cookieが有効になっていることを確認して、もう一度試してください。 "

0
Rohit Ghotkar

私だったら、「はい」と言います

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

次に、yesになります。読んで使用できます。

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

0
Sruit A.Suk

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

0
Sagar Patil

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

0
Amir Rezazadeh