PHP 세션 실패 및 전달 불가에 대한 솔루션

卡哇伊
풀어 주다: 2023-03-02 06:24:01
원래의
3415명이 탐색했습니다.

PHP 세션 실패 및 전달되지 않는 해결 방법: 먼저 "<?=phpinfo()?>" 콘텐츠로 PHP 파일을 작성한 다음 이를 서버에 전달하여 사용자 ID를 나타내는 서버의 매개변수 구성을 확인합니다. 식별된 세션입니다. 마지막으로 Havi에 세션 이름을 할당하고 세션을 출력합니다.

PHP 세션 실패 및 전달 불가에 대한 솔루션

PHP에서는 세션을 다음 페이지로 전달할 수 없습니다. 일반적으로 두 가지 상황이 있습니다.

먼저 PHP 파일을 작성해 보겠습니다. <?=phpinfo( ) ?>, 서버에 전달하여 서버 매개변수 구성을 확인합니다. <?=phpinfo()?>,传到服务器去看看服务器的参数配置。

转到session部分,看到session.use_trans_sid参数被设为了0。

这 个参数指定了是否启用透明SID支持,即session是否随着URL传递。我个人的理解是,一旦这个参数被设为0,那么每个URL都会启一个 session。这样后面页面就无法追踪得到前面一个页面的session,也就是我们所说的无法传递。两个页面在服务器端生成了两个session文 件,且无关联。

所以一个办法是在配置文件php.ini里把session.use_trans_sid

session 섹션으로 이동하여 session.use_trans_sid 매개변수가 0으로 설정되어 있는지 확인하세요.

이 매개변수는 투명한 SID 지원을 활성화할지 여부, 즉 세션이 URL과 함께 전달되는지 여부를 지정합니다. 개인적으로 이해하기로는 이 매개변수가 0으로 설정되면 각 URL이 세션을 시작한다는 것입니다. 이러한 방식으로 후속 페이지는 이전 페이지의 세션을 추적할 수 없으며, 이를 전달할 수 없다고 합니다. 두 페이지는 서버측에 두 개의 세션 파일을 생성하며 서로 관련이 없습니다.

한 가지 방법은 php.ini 구성 파일에서 session.use_trans_sid 값을 1로 변경하는 것입니다.

🎜🎜🎜물론 모든 사람이 PHP 구성을 변경할 권한이 있는 것은 아니라는 것을 알고 있습니다. 그렇다면 다른 간접적인 솔루션에는 어떤 것이 있습니까? 🎜🎜🎜🎜 두 가지 예를 들어 설명하겠습니다. 🎜🎜

파일 1 test1.php

<?php
//表明是使用用户ID为标识的session
session_id(SID);
//启动session
session_start();
//将session的name赋值为Havi
$_SESSION[&#39;name&#39;]=”Havi”;
//输出session,并设置超链接到第二页test2.php
echo “<a href=\”test2.php\”>”.$_SESSION[&#39;name&#39;].”</a>”;
?>
로그인 후 복사

파일 2: test2.php

<?php
表明是使用用户ID为标识的session
session_id(SID);
//启动session
session_start();
//输出test1.php中传递的session。
echo “This is “.$_SESSION[&#39;name&#39;];
?>
로그인 후 복사

세션을 열려면 모든 페이지를 써야 합니다. 그렇지 않으면 여전히 제대로 작동하지 않습니다

장소 그래서 핵심은 session_start(); 앞에 session_id(SID);를 추가하여 페이지가 변환될 때 서버가 사용자의 < 서버의 폴더에 있는 session에 저장된 code>세션을 사용하면 전송 문제가 해결됩니다. session_start();前加上session_id(SID);,这样页面转换时,服务器使用的是用户保存在服务器session文件夹里的session,解决了传递的问题。

不过有同鞋会反映说,这样一来,多个用户的session写在一个SID里了,那Session的价值就发挥不出来了。所以还有一招来解决此问题,不用加session_id(SID);前提是你对服务器的php.ini有配置的权限:

<span style="font-family: 微软雅黑, "Microsoft YaHei"; font-size: 14px;">output_buffering</span><span style="font-family: 微软雅黑, "Microsoft YaHei"; font-size: 14px;"></span>改成ON,道理就不表了。

第二个可能的原因是对服务器保存session的文件夹没有读取权限,还是回到phpinfo.php中,查看session

🎜🎜그러나 일부 동료들은 여러 사용자의 세션이 하나의 SID에 작성되면 세션의 가치가 완전히 실현되지 않을 것이라고 보고할 것입니다. 따라서 이 문제를 해결하는 다른 방법이 있습니다. session_id(SID);를 추가할 필요는 없습니다. 전제는 서버의 php.ini에 대한 구성 권한이 있다는 것입니다. 🎜🎜🎜🎜output_buffering🎜🎜🎜</code >🎜ON으로 변경하면 더 이상 진실이 표현되지 않습니다. 🎜🎜🎜🎜🎜두 번째 가능한 이유는 서버가 <code>세션을 저장하는 폴더에 대한 읽기 권한이 없거나, phpinfo.php로 돌아가서, 🎜View < code >session저장된 주소: 🎜🎜

<span style="font-family: 微软雅黑, "Microsoft YaHei"; font-size: 14px;">session.save_path: var/tmp</span>

所以就是检查下var/tmp文件夹是否可写。

写一个文件:test3.php来测试一下:

<?
echo var_dump(is_writeable(ini_get(“session.save_path”)));
?>
로그인 후 복사

如果返回bool(false),证明文件夹写权限被限制了,那就换个文件夹咯,在你编写的网页里加入:

//设置当前目录下session子文件夹为session保存路径。$sessSavePath = dirname(__FILE__).’/session/’;
//如果新路径可读可写(可通过FTP上变更文件夹属性为777实现),则让该路径生效。if(is_writeable($sessSavePath) && is_readable($sessSavePath)){session_save_path($sessSavePath);}
로그인 후 복사

위 내용은 PHP 세션 실패 및 전달 불가에 대한 솔루션의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿