백엔드 개발 PHP 튜토리얼 PHP에서 Session 사용에 대한 자세한 설명

PHP에서 Session 사용에 대한 자세한 설명

May 22, 2018 am 11:29 AM
php session 은닉처

PHP를 학습하는 과정에서 캐싱 문제에 직면하게 됩니다. 이 글에서는 관련 내용을 자세히 설명하겠습니다.

Session 선언 및 사용

Session 설정은 쿠키와 다르므로 먼저 Session_start()를 PHP에서 호출해야 합니다. session_start() 함수의 구문 형식은 다음과 같습니다.

Bool session_start(void) //세션 생성, 세션 시작 및 세션 초기화

참고: session_start() 함수 이전에는 출력이 있을 수 없습니다

웹사이트를 처음 방문할 때 Seesion_start() 함수는 고유한 세션 ID를 생성하고 HTTP 응답 헤더를 통해 세션 ID를 클라이언트 쿠키에 자동으로 저장합니다. 동시에 서버 측에도 세션 ID를 딴 파일이 생성되어 사용자의 세션 정보가 저장됩니다. 동일한 사용자가 이 웹사이트를 다시 방문할 경우, 쿠키에 저장된 Sesion ID는 HTTP 요청 헤더를 통해 자동으로 가져오게 됩니다. 이때 Session_start() 함수는 새로운 Session ID를 할당하지 않고 서버의 하드를 검색합니다. 세션 ID와 동일한 이름의 세션 파일을 디스크에 저장하고, 이 사용자에 대해 이전에 저장된 세션 정보를 읽어서 현재 스크립트에 적용하여 이 사용자를 추적하는 목적을 달성합니다. 세션은 다음과 같은 배열 형태로 사용됩니다: $_SESSION['세션 이름']

세션 변수를 등록하고 세션을 읽습니다

PHP에서 세션 변수를 사용할 때 시작하는 것 외에도 다음 단계를 거쳐야 합니다. 등록 과정. 세션 변수 등록 및 읽기는 $_SESSION 배열에 액세스하여 완료됩니다. $_SESSION 연관 배열의 키 이름은 PHP의 일반 변수와 동일한 명명 규칙을 갖습니다. 세션 변수를 등록하는 코드는 다음과 같습니다.

코드는 다음과 같습니다

//启动session的初始化
session_start();
//注册session变量,赋值为一个用户的名称
$_SESSION["username"]="skygao";
//注册session变量,赋值为一个用户的ID
$_SESSION["uid"]=1;
>
로그인 후 복사

스크립트를 실행한 후 두 개의 세션 변수가 서버 측에 파일로 저장됩니다. 파일의 위치는 PHP를 통해입니다. ini 파일, 세션에서 .save_path 속성으로 지정된 디렉터리에 있습니다.

변수 등록 취소 및 세션 파기

세션 변수를 사용한 후 삭제할 수 있고, 세션이 완료되면 파기할 수도 있습니다. 사용자가 웹 시스템에서 로그아웃하는 경우 로그아웃 기능을 제공해야 하며 해당 사용자의 모든 정보는 서버에서 파기됩니다. 현재 세션과 관련된 모든 데이터를 삭제하려면 session_destroy() 함수를 호출하여 현재 세션을 종료하고 세션의 모든 리소스를 지울 수 있습니다. 이 함수의 구문 형식은 다음과 같습니다.

bool session_destroy(void) //현재 Session과 관련된 모든 데이터를 삭제합니다.

이 함수는 현재 Session과 관련된 변수를 해제하지 않으며 세션에 저장된 쿠키를 삭제하지 않습니다. 클라이언트 Session

ID는 . $_SESSION 배열과 Custom 배열을 동일하게 사용하므로 unset() 함수를 사용하여 Session에 등록된 단일 변수를 해제할 수 있습니다. 아래와 같이:

unset($_SESSION['key name']);

전체 $_SESSION 배열을 삭제하기 위해 unset($_SESSION)을 사용하지 마십시오. 그러면 더 이상 $를 통해 변수를 등록할 수 없습니다. _SESSION 슈퍼 전역 배열. 하지만 사용자가 Session에 등록한 모든 변수를 삭제하려면 배열 변수 $_SESSION을 빈 배열에 직접 할당하면 됩니다. 아래와 같이

$_SESSION=array()

PHP의 기본 Session은 Cookie를 기반으로 합니다. Session

ID는 서버에 의해 클라이언트의 Cookie에 저장되므로, 다음과 같은 경우에도 Cookie에 저장된 SessionID를 지워야 합니다. 세션에서 로그아웃하려면 setCookie() 함수를 사용해야 합니다. PHP 스크립트에서는 session_name() 함수를 호출하여 세션 이름을 얻을 수 있습니다. 클라이언트 쿠키에 저장된 Session

ID를 삭제합니다.

코드는 다음과 같습니다

//쿠키에 세션ID가 존재하는지 확인

if(isset($_COOKIE[session_name() ])){

//세션 ID가 포함된 쿠키를 삭제합니다. 네 번째 매개변수는 php.ini

setcookie(session_name(),'',time()-3600, '/');

}

>

앞서 소개에서 세션 로그아웃 과정은 총 4단계가 필요하다는 결론을 내릴 수 있습니다. 다음 예에서는 전체 4단계 코드가 제공됩니다. 스크립트를 실행하면 세션이 닫히고 이 세션과 관련된 모든 리소스가 삭제됩니다. 코드는 다음과 같습니다.

코드는 다음과 같습니다

//第一步:开启Session并初始化
session_start();
//第二部:删除所有Session的变量,也可以用unset($_SESSION[XXX])逐个删除
$_SESSION = array();
//第三部:如果使用基于Cookie的session,使用setCookkie()删除包含Session ID的cookie
if(isset($_COOKIE[session_name()])) {
setCookie(session_name(), "", time()-42000, "/");
}
로그인 후 복사

//4부: 마지막으로 세션을 완전히 삭제

session_destroy();
>
session的phpini配置选项
php.ini文件和Session有关的几个常用配置选项:
session.auto_start = 0 ; 在请求启动时初始化session
session.cache_expire = 180 ; 设置缓存中的会话文档在 n 分钟后过时
session.cookie_lifetime = 0 ; 设置按秒记的cookie的保存时间,相当于设置Session的过期时间,为0时表示直到浏览器被重启
로그인 후 복사

session.auto_start=1이므로 사용하기 전에 매번 session_start()를 호출할 필요가 없습니다. 그러나 이 옵션을 활성화하는 데에는 몇 가지 제한 사항이 있습니다. session.auto_start가 실제로 활성화된 경우 개체를 다시 생성하려면 세션을 시작하기 전에 클래스 정의를 로드해야 하기 때문에 세션에 개체를 넣을 수 없습니다. 세션.

session.cookie_path = / ; cookie的有效路径
session.cookie_domain = ; cookie的有效域
session.name = PHPSESSID; 用在cookie里的session的名字
session.save_handler = files ; 用于保存/取回数据的控制方式
session.save_path = /tmp ; 在 save_handler 设为文件时传给控制器的参数, 这是数据文件将保存的路径.
session.use_cookies = 1 ; 是否使用cookies
로그인 후 복사

세션의 자동 가비지 수집 메커니즘

可以通过session_destroy()函数在页面中提供一个“退出”按钮,通过单击销毁本次会话。但如果用户没有单击退出按钮,而是直接关闭浏览器,或断网等情况,在服务器端保存的Session文件是不会删除的。虽然关闭浏览器,下次需要重新分配一个新的Session ID重新登录,但这只是因为在php.ini中的设置seesion.cookie_lifetime=0,来设定Session ID在客户端Cookie中的有效限期,以秒为单位指定了发送到浏览器的Cookie的生命周期。当系统赋予Session有效期限后不管浏览器是否开启,Session ID都会自动消失。而客户端Session ID消失服务器端保存的Session文件并没有被删除。所以没有被Sessoin ID引用的服务器端Session文件,就成为了“垃圾”。

服务器保存的Session文件就是一个普通文本文件,所以都会有文件修改时间。“垃圾回收程序”启动后就是根据Session文件的修改时间,将所有过期的Session文件全部删除。通过在php.ini中设置session.gc_maxlifetime选项来指定一个时间(单位:秒),例如设置该选项值为1440(24分钟)。“垃圾回收程序”就会在所有Session文件中排查,如果有修改时间距离当前系统时间大于1440秒的就将其删除。

“session垃圾回收程序”是怎样的启动机制呢“垃圾回收程序”是在调用session_start()函数时启动的。而一个网站有多个脚本,没有脚本又都要使用session_start()函数开启会话,又会有很多个用户同时访问,这就很可能session_start()函数在1秒内被调用N次,而如果每次都会启动“session垃圾回收程序”,这样是很不合理的。可以通过php.ini文件中修改“session.gc_probability和session.gc_pisor”两个选项,设置启动垃圾回收程序的概率。会根据“session.gc_probability/session.gc_pisor”公示计算概率,例如选项session.gc_probability=1,而选项session.gc_pisor=100,这样的概率就是“1/100”,即session_start()函数被调用100次才会有一次可能启动“垃圾回收程序”。

php.ini中相关的配置

session.cookie_lifetime=0; 关闭浏览器相应的cookie文件即被删除
session.gc_maxlifetime; 设置过期session时间,默认1440秒(24分钟)
session.gc_probability/session.gc_pisor; 启动垃圾回收机制的概率(建议值为1/1000——5000)
로그인 후 복사

cookie禁用时通过URL传递session的ID

使用Session跟踪一个用户,是通过在各个页面之间传递唯一的Session ID,并通过Session ID提取这个用户在服务器中保存的Session变量。常见的Session ID传送方法有以下两种。

第一种方法是基于cookie的方式传递session ID,这种方式更优,但不总是可用, 因为用户在客户端可以屏蔽cokie;

第二种方法是通过url参数进行传递,直接将session ID嵌入到URL中去。

在Session的实现中通常都是采用Cookie的方式,客户端保存的Session ID就是一个Cookie。当客户禁用Cookie时,Session ID就不能在Cookie中保存,也就不能在页面之间传递,此时Session失效。不过PHP5在Linux平台可以自动检查Cookie状态,如果客户端禁用它,则系统自动把Session ID附加到URL上传送。而使用Windows系统作为Web服务器则无此功能。

在PHP中提出了跟踪Session的另一种机制,如果客户浏览器不支持Cookie,则PHP可以重写客户请求的URL,把Session ID添加到URL信息中。可以手动地在每个超链接的URL中都加上一个Session ID,但工作量比较大,不建议使用这种方法。如下所示:

代码如下

//开启session

session_start();

//在每个URL后面附加上参数,变量名为session_name()获取名称,值通过session_id()获取

echo '连接演示';

>

在使用Linux系统做服务器时,则在编辑PHP时如果使用了–enable-trans-sid配置选项,和运行时选项session.use_trans_sid都被激活,在客户端禁用Cookie时,相对URL将被自动修改为包含会话ID。如果没有这么配置,或者使用Windows系统作为服务器时,可以使用常量SID。该常量在会话启动时被定义,如果客户端没有发送适当的会话Cookie,则SID的格式为session_name=session_id,否则就为一个空字符串。因此可以无条件地将其嵌入到URL中去。在下例中使用两个脚本程序,演示了Session ID的传送方法。

session_start();
$_SESSION["username"]="admin";
echo "session ID:".session_id()."
";
로그인 후 복사

本篇详解了session的相关问题,更多相关知识请关注php中文网。

相关推荐:

php中die(),exit(),return的区别介绍

SQL 中 on 条件与 where 条件的区别

关于php 压缩CSS代码的方法

위 내용은 PHP에서 Session 사용에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 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 Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Ubuntu 및 Debian용 PHP 8.4 설치 및 업그레이드 가이드 Ubuntu 및 Debian용 PHP 8.4 설치 및 업그레이드 가이드 Dec 24, 2024 pm 04:42 PM

PHP 8.4는 상당한 양의 기능 중단 및 제거를 통해 몇 가지 새로운 기능, 보안 개선 및 성능 개선을 제공합니다. 이 가이드에서는 Ubuntu, Debian 또는 해당 파생 제품에서 PHP 8.4를 설치하거나 PHP 8.4로 업그레이드하는 방법을 설명합니다.

CakePHP 날짜 및 시간 CakePHP 날짜 및 시간 Sep 10, 2024 pm 05:27 PM

cakephp4에서 날짜와 시간을 다루기 위해 사용 가능한 FrozenTime 클래스를 활용하겠습니다.

CakePHP 토론 CakePHP 토론 Sep 10, 2024 pm 05:28 PM

CakePHP는 PHP용 오픈 소스 프레임워크입니다. 이는 애플리케이션을 훨씬 쉽게 개발, 배포 및 유지 관리할 수 있도록 하기 위한 것입니다. CakePHP는 강력하고 이해하기 쉬운 MVC와 유사한 아키텍처를 기반으로 합니다. 모델, 뷰 및 컨트롤러 gu

CakePHP 파일 업로드 CakePHP 파일 업로드 Sep 10, 2024 pm 05:27 PM

파일 업로드 작업을 위해 양식 도우미를 사용할 것입니다. 다음은 파일 업로드의 예입니다.

CakePHP 유효성 검사기 만들기 CakePHP 유효성 검사기 만들기 Sep 10, 2024 pm 05:26 PM

컨트롤러에 다음 두 줄을 추가하면 유효성 검사기를 만들 수 있습니다.

PHP 개발을 위해 Visual Studio Code(VS Code)를 설정하는 방법 PHP 개발을 위해 Visual Studio Code(VS Code)를 설정하는 방법 Dec 20, 2024 am 11:31 AM

VS Code라고도 알려진 Visual Studio Code는 모든 주요 운영 체제에서 사용할 수 있는 무료 소스 코드 편집기 또는 통합 개발 환경(IDE)입니다. 다양한 프로그래밍 언어에 대한 대규모 확장 모음을 통해 VS Code는

CakePHP 빠른 가이드 CakePHP 빠른 가이드 Sep 10, 2024 pm 05:27 PM

CakePHP는 오픈 소스 MVC 프레임워크입니다. 이를 통해 애플리케이션 개발, 배포 및 유지 관리가 훨씬 쉬워집니다. CakePHP에는 가장 일반적인 작업의 과부하를 줄이기 위한 여러 라이브러리가 있습니다.

PHP에서 HTML/XML을 어떻게 구문 분석하고 처리합니까? PHP에서 HTML/XML을 어떻게 구문 분석하고 처리합니까? Feb 07, 2025 am 11:57 AM

이 튜토리얼은 PHP를 사용하여 XML 문서를 효율적으로 처리하는 방법을 보여줍니다. XML (Extensible Markup Language)은 인간의 가독성과 기계 구문 분석을 위해 설계된 다목적 텍스트 기반 마크 업 언어입니다. 일반적으로 데이터 저장 AN에 사용됩니다

See all articles