ほとんどのセッションは、php/jspなどのCookieに基づいています
しかし、モバイルデバイスに関しては、Cookieをサポートしていないものがかなりあります。
同じIPアドレスを使用する同じ企業のユーザーごとに一意のIDを生成するにはどうすればよいですか?
PHPとJSPはどちらも、URLを介したセッション追跡をサポートしています。
PHPでは、非表示の入力要素としてフォームを介してリクエストパラメータとして渡し、クエリ文字列の一部としてリンクsession_id()
を渡す必要があります。PHPSESSID
<form action="page.php">
<input type="hidden" name="PHPSESSID" value="<?= session_id() ?>">
...
</form>
<a href="page.php?PHPSESSID=<?= session_id() ?>">link</a>
PHPエンジンはそれを自動的にスキャンし、Cookieなしのセッションに適用します。
JSPでは、「URL書き換え」と呼ばれます(PHP / Apache HTTPDの世界ではまったく異なる意味を持ちます)。ビュー側では、JSTLを使用して<c:url>
、必要に応じてURLを書き換えることができます(必要性が自動的に検出されます)。
<form action="<c:url value="page.jsp">">
...
</form>
<a href="<c:url value="page.jsp">">link</a>
コントローラ側では、同じコンテキスト内でサーバー側のリダイレクトを実行する場合、実行するHttpServletResponse#encodeRedirectURL()
前にURLで実行する必要がありますsendRedirect()
。
response.sendRedirect(response.encodeRedirectURL("page.jsp"));
jsessionid
いずれの場合も、次の構文でURLに自動的に追加されます。
/page.jsp;jsessionid=5AE12D39BCE87F61029876BF1AA28
servletcontainerは自動的にスキャンし、Cookieなしのセッションに適用します。
Cookie が失敗すると、昔ながらのクエリ文字列が登場します。はい、安全性は低くなりますが、とにかく選択の余地はありません。詳細については、 php セッション マニュアルを参照してください。
session_regenerate_id(); // 新しいセッション ID を取得します
セッション Cookie が有効になっている場合、session_regenerate_id() を使用すると、新しいセッション ID を持つ新しいセッション Cookie も送信されます。