検索
ホームページバックエンド開発PHPチュートリアルPHPでSESSIONがページをまたいで受け渡せない問題の解決策

PHPでSESSIONがページをまたいで受け渡せない問題の解決策

PHP で SESSION を使用している友人は、SESSION 変数をページ間で渡すことができないという問題に遭遇する可能性があります。これには数日間悩みましたが、情報を調べて最終的に問題を考え、解決しました。この問題の理由は次のとおりだと思います。
1. クライアントで Cookie が無効になっていますか?
2. ブラウザに問題があり、Cookie に一時的にアクセスできませんか?
3. php.ini の Session.use_trans_sid?=?0 またはコンパイル時に --enable-trans-sid オプションがオンになっていませんか?

なぜこのようなことが起こっているのでしょうか?以下で説明しましょう:?

セッションはサーバー側に保存されます (デフォルトではセッションはファイルとして保存されます)。クライアントから提供された session?id に従ってユーザーのファイルが取得され、変数の値が取得されます。 session?id にはクライアントの Cookie または Http1.1 プロトコルの Query_String (つまり、アクセスされた URL の "?" 以降の部分) がサーバーに送信され、サーバーはセッション ディレクトリを読み取ります。つまり、session?id はサービスに保存されているセッション変数を取得する ID カードです。コードを書くとき session_start(); が実行されると、サーバー上にセッション ファイルが生成され、それに一意に対応する session?id も生成され、定義されます。 セッション変数は、生成されたばかりのセッション ファイルに特定の形式で保存されます。 session?id を通じて、定義された変数を取得できます。ページを移動した後、セッションを使用するには、session_start() を再度実行する必要があります。これに対応して、対応する session?id が生成されます。 この session?id はファイルを開くための「キー」ではないため、前述の最初のセッション ファイル内の変数を取り出すことは不可能です。 session_start(); の前にコード session_id($session?id); を追加すると、新しいセッション ファイルは生成されず、この ID に対応するセッション ファイルが直接読み取られます。 ?

PHP のセッションは、デフォルトでクライアントの Cookie を使用してセッション ID を保存するため、クライアントの Cookie に問題があると、セッションに影響します。セッションは必ずしも Cookie に依存する必要はないことに注意する必要があります。これが、Cookie と比較したセッションの優れた点でもあります。クライアントが Cookie が無効になっている場合、または問題が発生した場合、PHP は自動的に session?id を URL に付加し、session?id を通じてセッション変数をページ間で使用できるようにします。ただし、この添付ファイルには特定の条件もあります。つまり、「php.ini の session.use_trans_sid?=?1、またはコンパイル中に --enable- がオンになっている」 トランスサイドオプション」。

フォーラムを使用したことのある友人は、フォーラムに参加するときに、Cookie がオンになっているかどうかを確認するメッセージが頻繁に表示されることを知っています。これは、ほとんどのフォーラムが Cookie に基づいており、フォーラムではユーザー名と情報を保存するために Cookie が使用されるためです。使いやすさのためのパスワードやその他のユーザー情報。そして多くの友人は、Cookie は安全ではないと考えており (実際には安全ではありません)、Cookie を無効にすることがよくあります。実際、PHP プログラムでは次のように使用できます。 SESSION は Cookie を置き換えます。これは、クライアントが Cookie をオンにするかどうかには依存しません。 ?

したがって、Cookie を脇に置いてセッションを使用できます。つまり、ユーザーが Cookie をオフにしてセッションを使用すると仮定します。これを実現するには、いくつかの方法があります。

1. php.ini で session.use_trans_sid?=?1 を設定するか、コンパイル時に --enable-trans-sid オプションをオンにして、PHP がページ間で session?id を自動的に渡すようにします。 ?
2. URL を通じて値を手動で渡し、非表示のフォームで session?id を渡します。 ?
3. session_id をファイル、データベースなどに保存し、クロスページ プロセス中に手動で呼び出します。 ?

パス 1 の例:?

s1.php?


session_start();?
$_SESSION[’var1’]="中華人民共和国";?
$url="次のページ";?
echo?$url;?
?

s2.php?

session_start();?
echo?" 渡されるセッション変数 var1 の値は次のとおりです: ".$_SESSION[’var1’];?
?>?

上記のコードを実行すると、クライアント Cookie が正常であれば、結果「中華人民共和国」が得られるはずです。?
ここで、クライアント上の Cookie を手動で閉じて再度実行すると、結果が得られない可能性があります。結果が得られない場合は、php.ini で session.use_trans_sid?=?1 を設定するか、コンパイル時に --enable-trans-sid オプションをオンにすると、「中華人民共和国」という結果が得られます。 「?



パス 2 の例:?

s1.php?

session_start();?
$_SESSION[’var1’]="中華人民共和国";?
$sn?=?session_id();?
$url="次のページ";?
echo?$url ;?
?>?

s2.php?

session_id($_GET[’s’]);?
session_start();?
echo?" 渡されるセッション変数 var1 の値は次のとおりです: ".$_SESSION[’var1’];?
?>?

フォームを非表示にする基本原則は上記と同じです。 ?

パス 3 の例:

login.html?

HTML?PUBLIC?"-//W3C//DTD?HTML?4.01?Transitional//EN">?
?

ログイン?
?
?

ログインしてください:?

?
ユーザー名:
?
パスワード:
?

?
?
?


$name=$_POST['name'];
$pass=$_POST['pass'];?
if(!$name?||?!$pass)?{?
????echo?"ユーザー名またはパスワードが空です。再度ログインしてください";?
??die();?
}?
if?(!($name=="laogong"?&&?$pass=="123")?
????echo?"ユーザー名またはパスワードが間違っています。再度ログインしてください";?
???die();?
}?
ob_start();?
session_start();?
$_SESSION['user']=?$name;?
$psid=session_id();?
$fp=fopen("e:tmpphpsid.txt","w+";?
fwrite($fp,$psid);?
fclose($fp);?
//本人確認が成功しました。関連する操作を実行しますか?
echo?"ログイン
";?
エコー?"次のページ";?

?>?

mylogin2.php?

$fp=fopen("e:tmpphpsid.txt","r";?
$sid=fread($fp,1024);?
fclose($fp);
セッション ID($sid);?
session_start();?
if(isset($_SESSION[’user’])?&&?$_SESSION[’user’]="老公"??{?
????
????echo?"すでにログインしています!";?
}?
else?{?
????// 実行に成功しました関連する操作?
????echo?「ログインしていません。アクセス権がありません」;?
????echo?"ログインして閲覧してください";?
????die();?
}?

?>

ユーザー名: laogong? パスワード: 123?? ファイル名は e:?mpphpsid.txt です。独自のシステムまたはパスに応じて。 ?

データベース方式については例を挙げませんが、ファイル方式と同様です。 ?

要約すると、上記のメソッドには 1 つの共通点があります。それは、前のページで session?id を取得し、それを次のページに渡す方法を見つけて、コード session_id(次のページの session_start(); コードの前に渡されました session?id);?


声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
SpringBoot Session怎么设置会话超时SpringBoot Session怎么设置会话超时May 15, 2023 pm 02:37 PM

问题发现springboot项目生产session-out超时问题,描述下问题:在测试环境通过改动application.yaml配置session-out,经过设置不同时间验证session-out配置生效,于是就直接设置了过期时间为8小时发布到了生产环境。然而中午接到客户反应项目过期时间设置较短,半小时不操作就会话过期需要反复登陆。解决处理开发环境:springboot项目内置Tomcat,所以项目中application.yaml配置session-out是生效的。生产环境:生产环境发布是

php session刷新后没有了怎么办php session刷新后没有了怎么办Jan 18, 2023 pm 01:39 PM

php session刷新后没有了的解决办法:1、通过“session_start();”开启session;2、把所有的公共配置写在一个php文件内;3、变量名不能和数组下标相同;4、在phpinfo里面查看session数据的存储路径,并查看该文件目录下的sessio是否保存成功即可。

session php默认失效时间是多少session php默认失效时间是多少Nov 01, 2022 am 09:14 AM

session php默认失效时间是1440秒,也就是24分钟,表示客户端超过24分钟没有刷新,当前session就会失效;如果用户关闭了浏览器,会话就会结束,Session就不存在了。

PHP如何在多个文件中正确地读取和写入Session数据PHP如何在多个文件中正确地读取和写入Session数据Mar 23, 2023 am 11:12 AM

当您在使用PHP会话(Session)时,有时会发现Session在一个文件中可以正常读取,但在另一个文件中却无法读取。这可能会让您感到困惑,因为会话数据应该可以在整个应用程序中共享。本文将解释如何在多个文件中正确地读取和写入PHP会话数据。

Redis的共享session应用如何实现短信登录Redis的共享session应用如何实现短信登录Jun 03, 2023 pm 03:11 PM

1.基于session实现短信登录1.1短信登录流程图1.2实现发送短信验证码前端请求说明:说明请求方式POST请求路径/user/code请求参数phone(电话号码)返回值无后端接口实现:@Slf4j@ServicepublicclassUserServiceImplextendsServiceImplimplementsIUserService{@OverridepublicResultsendCode(Stringphone,HttpSessionsession){//1.校验手机号if

Springboot2 session设置超时时间无效怎么解决Springboot2 session设置超时时间无效怎么解决May 22, 2023 pm 01:49 PM

问题:今天项目中遇到了一个设置时间超时的问题,按SpringBoot2的application.properties更改一直不生效。解决方案:server.*属性用于控制SpringBoot使用的嵌入式容器。SpringBoot将使用ServletWebServerFactory实例之一创建servlet容器的实例。这些类使用server.*属性来配置受控的servlet容器(tomcat,jetty等)。当应用程序作为war文件部署到Tomcat实例时,server.*属性不适用。它们不适用,

JavaScript和PHP的cookie之间有哪些区别?JavaScript和PHP的cookie之间有哪些区别?Sep 02, 2023 pm 12:29 PM

JavaScriptCookie使用JavaScriptcookie是记住和跟踪偏好、购买、佣金和其他信息的最有效方法。更好的访问者体验或网站统计所需的信息。PHPCookieCookie是存储在客户端计算机上的文本文件并保留它们用于跟踪目的。PHP透明地支持HTTPcookie。JavaScriptcookie如何工作?您的服务器将一些数据发送到访问者的浏览器cookie的形式。浏览器可以接受cookie。如果存在,它将作为纯文本记录存储在访问者的硬盘上。现在,当访问者到达站点上的另一个页面时

PHP如何处理微信小程序中的session问题PHP如何处理微信小程序中的session问题Jun 02, 2023 pm 03:40 PM

近年来,微信小程序风靡全球,已经成为了许多企业和个人开发者的首选平台。在小程序的开发中,我们经常会遇到session问题,也就是如何在小程序中保存用户登录状态。这个问题对于网站开发者来说并不陌生,但在小程序中却有些不同。本文将介绍如何使用PHP解决微信小程序中的session问题。一、小程序登录过程概述小程序的登录流程与网站的登录流程类似,分为以下几个步骤:

See all articles

ホット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ヘンタイを無料で生成します。

ホットツール

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)