백엔드 개발 PHP 문제 세션에 대한 자세한 이해

세션에 대한 자세한 이해

Aug 20, 2019 pm 02:23 PM
session

1. 세션이란 무엇입니까

세션의 공식 정의는 다음과 같습니다. 세션: 컴퓨터, 특히 네트워크 응용 프로그램에서는 "세션 제어"라고 합니다. Session 개체는 특정 사용자 세션에 필요한 속성 및 구성 정보를 저장합니다.

직설적으로 말하면 세션은 서버 측을 유지할 수 있는 데이터 저장 기술입니다. 세션은 주로 다음과 같은 특징을 가지고 있습니다.

1. 세션은 서버 측에 저장됩니다.

2. 일반적으로 세션은 쿠키와 함께 사용됩니다. 브라우저에서 쿠키 기능을 비활성화하면 URL 재사용만 사용할 수 있습니다. 세션 저장 기능

3. 단순히 사용자 상태를 유지하기 위해 세션을 사용한다면, 동시에 로그인하는 사용자가 많거나, 세션 수가 많을 때 쿼리 속도가 느려지는 문제가 발생할 수 있습니다

본질 위: 세션 기술은 데이터베이스와는 달리 백엔드를 기반으로 데이터를 임시 저장하는 기술입니다. 2. 세션이 존재하는 주요 이유 중 하나는 무국적(Stateless)이기 때문입니다. HTTP이므로 HTTP 요청을 보낼 때 현재 사용자의 상태, 즉 현재 어떤 사용자가 있는지 등의 정보를 알 수 없으므로 이때 현재 상태를 식별하려면 세션이 필요합니다

3. 세션의 작동 원리

다음으로, 사용자 로그인을 시뮬레이션하는 흐름도를 통해 먼저 세션의 원리를 이해해 보겠습니다. 이때 사용자가 로그인 작업을 수행한다고 가정합니다.

전체 프로세스는 대략 다음과 같은 몇 가지 단계로 나뉩니다.

1. 첫 번째 단계는 로컬 쿠키의 세션 ID, 사용자 이름 및 비밀번호를 백그라운드로 가져오는 것입니다.

2. 백그라운드에 해당 세션 ID가 있는지 확인하려면 PHP를 예로 들어 해당 PHPSESSID가 수신되었는지 감지합니다.

세션에 대한 자세한 이해3. 그렇지 않은 경우 직접 새 세션을 생성합니다. 그렇다면 해당 파일이 존재하고 유효한지 확인하세요

3. 유효하지 않은 경우 세션을 지우고 새 세션을 생성해야 합니다. 유효하지 않습니다. 현재 세션을 사용하세요

여기에서 세션의 작동 원리를 미리 이해할 수 있습니다

세션의 도식은 다음과 같습니다.

4. 세션의 일반적인 구성

세션 구성을 설명하기 위해 PHP를 예로 들어 보겠습니다. 세션에 대한 자세한 이해

먼저 PHP 설치 디렉터리에서 php.ini 파일을 찾아야 합니다. 이 파일의 주요 기능은 PHP의 일부 구성을 구성하는 것입니다. 나중에 자세히 논의하겠습니다.

1. 세션이 저장될 때 쿠키에서 식별되는 필드 이름을 설정합니다. php의 기본값은 PHPSESSID
해당 설정은 session.name = PHPSESSID입니다.

2. 클라이언트가 쿠키를 비활성화하는 경우 session.use_trans_sid를 설정하여 ID의 상호 작용 방법을 쿠키에서 URL 전달로 변경할 수 있습니다. 해당 설정은 session.use_trans_sid = 0입니다. code>

3. 세션 저장 위치 설정

해당 설정은 session.save_path="D:phpStudyPHPTutorialtmptmp"PHPSESSID

  对应的设置为:session.name = PHPSESSID

  2. 如果客户端禁用了cookie,可以通过设置session.use_trans_sid来使标识的交互方式从cookie变为url传递

    对应的设置为:session.use_trans_sid = 0

  3. 设置session的保存位置

  对应的设置是session.save_path="D:phpStudyPHPTutorialtmptmp"

5、PHP中的session实战

 首先我们需要安装wamp或者是phpstudy,具体方式自行百度

 为了方便观察session文件的变化,我们需要找到session的保存路径(在php.ini中找到session.save_path),如下:

세션에 대한 자세한 이해

然后找到所指向的目录,注意一般来说session是使用files的形式来保存的,但是我们也可以根据自己的实际情况进行修改。我们可以在php.ini文件中进行修改和查看。

세션에 대한 자세한 이해

 使用session的第一步,我们要打开session,使用session_start()

5입니다. PHP에서 세션 연습

먼저. wamp 또는 phpstudy를 설치해야 하며 구체적인 방법은 Baidu에 있습니다세션에 대한 자세한 이해

세션 파일의 변경 사항을 쉽게 관찰하려면 다음의 저장 경로를 찾아야 합니다. 다음과 같이 세션(php.ini session.save_path에서 찾기): <p></p> <img src="/static/imghw/default1.png" data-src="https://img.php.cn/upload/image/873/651/859/1566281099926592.jpg" class="lazy" title="1566280902304346.jpg" alt="세션에 대한 자세한 이해"><p><img src="/static/imghw/default1.png" data-src="https://img.php.cn/upload/image/873/651/859/1566281099926592.jpg" class="lazy" title="1566281099926592.jpg" alt="세션에 대한 자세한 이해"> 그런 다음 가리키는 디렉터리를 찾습니다. 일반적으로 세션은 파일 형식으로 저장되지만 다음 사항에 따라 수정할 수도 있습니다. 우리의 실제 상황. php.ini 파일에서 수정하고 볼 수 있습니다. </p> <p><img src="/static/imghw/default1.png" data-src="https://img.php.cn/upload/image/738/444/281/1566280946577136.jpg" class="lazy" title="1566280946577136.jpg" alt="세션에 대한 자세한 이해"></p> <p> 사용 세션의 첫 번째 단계에서는 세션을 열고 <code>session_start()를 사용해야 합니다. 그런 다음 생성된 세션에 변수를 추가하고 값은 기본값이라고 가정합니다.

<?php
/**
 * Created by PhpStorm.
 * Date: 2017/12/16
 */
session_start();// 打开session
$_SESSION["demo1"] = "default";
?>
로그인 후 복사

실행 효과는 다음과 같습니다. 세션에 대한 자세한 이해

🎜🎜🎜🎜해당 파일을 열면 내부 내용은 다음과 같습니다. 🎜🎜🎜🎜🎜s:7은 길이가 7인 문자열 유형의 문자열 유형을 나타냅니다. 🎜🎜 ​​만약 내용을 다시 편집한다면 효과는 다음과 같습니다: 🎜🎜🎜🎜

我们观察最近一条的修改日期,我们可以发现就是日期发生了变化,但是文件名没有变化,也就是说,修改session中的内容不会导致文件被新建,而是执行对文件的重新写入操作

session的销毁

销毁session一般有两种方式,unsetsession_destroy,我们先来说说第一种

代码如下:

<?php
/**
 * Created by PhpStorm.
 * Date: 2017/12/16
 */
session_start();// 打开session
$_SESSION["demo1"] = "default_1";
//session的销毁
unset($_SESSION);
?>
로그인 후 복사

这一个相当于没有删除session文件,但是使得即使有对应的PHPSESSID也无法获取到相应的session

session_destroy()相对来说比较彻底,直接删除对应的session文件

<?php
/**
 * Created by PhpStorm.
 * Date: 2017/12/16
 */
session_start();// 打开session
$_SESSION["demo1"] = "default_1";
var_dump(session_name());
//session的销毁
session_destroy();
?>
로그인 후 복사

세션에 대한 자세한 이해

对于个人来说比较推荐使用第二种方法,因为当要销毁session的时候,那么也就意味着session已经失效了,所以这个时候我们把它给删掉才是最好的处理方式,一方面可以减少对硬盘的存储,另外一方面可以相对优化session的查询速度。

好了,这个时候我们应该要设置传递给浏览器端的cookie了,默认是自动传送,但是我们应该要学习的是怎样通过后端设置cookie过去

其中有两个方法与session有关的方法我们需要记住,第一个是session_name(),这个是获取cookie的key值得,第二个是session_id,这个是session的文件名

设置的示例代码:

<?php
/**
 * Created by PhpStorm.
 * Date: 2017/12/16
 */
session_start();// 打开session
$_SESSION["demo1"] = "default_1";
setCookie(session_name(),session_id(),time()-1000);
?>
로그인 후 복사

在设置cookie的时候,我们为了程序的安全性,我们应该要禁止JS可以对cookie进行重写,所以需要设置HTTP ONLY,具体的设置方法在Php.ini中找到session.cookie_httponly

然后将其的值设置为1或者true即可

除此之外还可以通过setCookieini_set()来动态设置HTTPONLY属性

在使用session的时候,虽然会从浏览器把PHPSESSID传给后端,但是这个课程不需要人为的去参与。我们只需要保证HTTPONLY被设置就行了。下面是完整的代码:

<?php
/**
 * Created by PhpStorm.
 * Date: 2017/12/16
 */
session_start();// 打开session
if ($_SESSION) {
    var_dump($_SESSION["demo1"]);
} else {
    $_SESSION["demo1"] = "default_" . time();
    var_dump($_SESSION["demo1"]);
    setCookie(session_name(), session_id(), time(), NULL, NULL, NULL, true);
}

?>
로그인 후 복사

6、session的相关注意事项

 1. 关闭浏览器session同样存在

 如果我们没有人为的去设置cookie的生命周期的时候默认关闭浏览器session的状态是无法被保存下来的,因为没有设置cookie的生命周期,默认这个时候cookie为session cookie也就是在会话存在的时候cookie才有效,所以关闭浏览器cookie失效,导致后端拿不到对应的PHPSESSID,所以无法找到对应的session文件

2.  session性能瓶颈怎样解决?

如果是后端存在大量的session的时候,那么这个时候就会出现性能的瓶颈,例如:当后端同时存在有5000个session文件的时候,假设要找的文件是在第4999个,那么也就是说前面至少需要遍历4998次,这样就会浪费过多的时间在后端的循环遍历查找文件中,所以这个时候最有效的方法是使用redis或者mongodb,原理是通过将原本保存在本地的session文件写入到内存中,通过内存换空间的形式来达到提升速度

3. 一般不使用URL重写的方法来传递PHPSESSID

其中主要有两个原因,一个是URL重写方式传递的话会导致URL混乱,影响美观。另一个是增大了用户误操作的几率

更多的session的相关配置请点击这里

7、更多的一些PHP.in中的session含义

[Session]

session.save_handler =的存储方式

session.use_cookies= 1 #使用cookies在客户端保存会话

session.use_only_cookies = 1 #去保护URL中传送session id的用户

session.name = PHPSESSID #session名称(默认PHPSESSID)

session.auto_start = 0 #不启用请求自动初始化session

session.cookie_lifetime = 0 #cookie存活时间(0为直至浏览器重启,单位秒)

session.cookie_path = / #cookie的有效路径

session.cookie_domain = #cookie的有效域名

session.cookie_httponly = #httponly标记增加到cookie上(脚本语言无法抓取)

session.serialize_handler = php #PHP标准序列化

session.gc_probability =1

session.gc_divisor =1000 #建议设置1000-5000

#概率=session.gc_probability/session.gc_divisor(1/1000)

#页面访问越频繁概率越小

session.gc_maxlifetime =1440 #过期时间(默认24分钟,单位秒)

session.bug_compat_42 = off #세션 변수 전역 초기화session.bug_compat_42 = off #全局初始化session变量

session.bug_compat_warn = off

session.referer_check = #防止带有ID的外部URL

session.entopy_length = 0 #读取的字节

session.cache_limiter = {nocache,private,pblic} #HTTP缓冲类型

session.cache_expire = 180 #文档过期时间(分钟)

session.use_trans_sid = 1 #trans_sid支持(默认0)

session.hash_function = 0 #hash方法{0:md5(128 bits),1:SHA-1(160 bits)}

session.hash_bits_per_character = 5 #当转换二进制hash数据奥可读形式是,每个字符保留位数

session.save_path 

session.bug_compat_warn = off

session.referer_check = #ID 방지 외부 URL

session.entopy_length = 0 #바이트 읽기 🎜🎜session.cache_limiter = {nocache,private,pblic} #HTTP 버퍼 유형 🎜🎜session.cache_expire = 180 #문서 만료 시간(분)🎜🎜session.use_trans_sid = 1 #trans_sid 지원(기본값 0)🎜🎜session.hash_function = 0 #해시 방법 {0:md5(128비트),1:SHA-1(160비트)}🎜🎜session.hash_bits_per_character = 5 #바이너리 해시 데이터 변환 시 읽을 수 있는 형식은 예약된 자릿수 각 문자마다🎜🎜session.save_path = "/var/lib/php/session" #session id 저장 경로🎜🎜이상은 세션에 대한 자세한 설명입니다. 자세한 문의사항은 PHP를 방문해주세요. 중국어 웹사이트: 🎜https://www.php.cn/🎜🎜

위 내용은 세션에 대한 자세한 이해의 상세 내용입니다. 자세한 내용은 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를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

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

SublimeText3 중국어 버전

SublimeText3 중국어 버전

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

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

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

SpringBoot 세션에서 세션 시간 초과를 설정하는 방법 SpringBoot 세션에서 세션 시간 초과를 설정하는 방법 May 15, 2023 pm 02:37 PM

springboot 프로젝트 프로덕션 세션아웃 시간 초과에서 문제가 발견되었습니다. 문제 설명: 테스트 환경에서는 세션아웃 구성이 적용되었는지 확인하기 위해 application.yaml을 변경하여 세션아웃을 구성했습니다. , 프로덕션 환경에 도착하면 만료 시간이 8시간으로 직접 설정되었습니다. 그런데 정오에 고객으로부터 프로젝트 만료 시간이 짧게 설정되어 있다는 피드백을 받았습니다. 30분 동안 아무 작업도 수행하지 않으면 세션이 만료되어 반복 로그인이 필요합니다. 개발 환경 처리 문제를 해결합니다. springboot 프로젝트에는 Tomcat이 내장되어 있으므로 프로젝트의 application.yaml에 구성된 세션 아웃이 효과적입니다. 프로덕션 환경: 프로덕션 환경 릴리스는 다음과 같습니다.

세션 실패를 해결하는 방법 세션 실패를 해결하는 방법 Oct 18, 2023 pm 05:19 PM

세션 실패는 일반적으로 세션 수명 만료 또는 서버 종료로 인해 발생합니다. 해결 방법은 다음과 같습니다. 1. 세션 수명을 연장합니다. 3. 쿠키를 사용합니다. 4. 세션 관리 미들웨어를 사용합니다.

PHP 세션 교차 도메인 문제에 대한 솔루션 PHP 세션 교차 도메인 문제에 대한 솔루션 Oct 12, 2023 pm 03:00 PM

PHPSession의 도메인 간 문제 해결 프런트엔드와 백엔드 분리 개발에서 도메인 간 요청이 표준이 되었습니다. 도메인 간 문제를 처리할 때 일반적으로 세션 사용 및 관리가 포함됩니다. 그러나 브라우저 원본 정책 제한으로 인해 기본적으로 도메인 간에 세션을 공유할 수 없습니다. 이 문제를 해결하려면 도메인 간 세션 공유를 달성하기 위한 몇 가지 기술과 방법을 사용해야 합니다. 1. 도메인 간 세션을 공유하기 위한 쿠키의 가장 일반적인 사용

새로 고침 후 PHP 세션이 사라지면 어떻게 해야 합니까? 새로 고침 후 PHP 세션이 사라지면 어떻게 해야 합니까? Jan 18, 2023 pm 01:39 PM

새로 고침 후 PHP 세션이 사라지는 문제에 대한 해결 방법: 1. "session_start();"를 통해 세션을 엽니다. 2. 모든 공개 구성을 PHP 파일에 작성합니다. 3. 변수 이름은 배열 첨자와 같을 수 없습니다. 4. phpinfo에서 세션 데이터의 저장 경로를 확인하고 파일 디렉터리의 sessio가 성공적으로 저장되었는지 확인합니다.

세션 PHP의 기본 만료 시간은 얼마입니까? 세션 PHP의 기본 만료 시간은 얼마입니까? Nov 01, 2022 am 09:14 AM

세션 PHP의 기본 만료 시간은 1440초(24분)입니다. 즉, 클라이언트가 24분 이상 새로 고치지 않으면 사용자가 브라우저를 닫으면 현재 세션이 만료되고 세션이 종료됩니다. 세션이 더 이상 존재하지 않습니다.

Springboot2 세션 시간 초과 설정이 잘못된 문제를 해결하는 방법 Springboot2 세션 시간 초과 설정이 잘못된 문제를 해결하는 방법 May 22, 2023 pm 01:49 PM

문제: 오늘 프로젝트에서 설정 시간 초과 문제가 발생했으며 SpringBoot2의 application.properties에 대한 변경 사항이 적용되지 않았습니다. 해결 방법: server.* 속성은 SpringBoot에서 사용하는 내장 컨테이너를 제어하는 ​​데 사용됩니다. SpringBoot는 ServletWebServerFactory 인스턴스 중 하나를 사용하여 서블릿 컨테이너의 인스턴스를 생성합니다. 이러한 클래스는 server.* 속성을 사용하여 제어되는 서블릿 컨테이너(tomcat, jetty 등)를 구성합니다. 애플리케이션이 Tomcat 인스턴스에 war 파일로 배포되면 server.* 속성이 적용되지 않습니다. 적용되지 않습니다.

Redis 공유 세션 애플리케이션에서 SMS 로그인을 구현하는 방법 Redis 공유 세션 애플리케이션에서 SMS 로그인을 구현하는 방법 Jun 03, 2023 pm 03:11 PM

1. 세션 기반 SMS 로그인 구현 1.1 SMS 로그인 흐름도 1.2 SMS 인증코드 전송 구현 프런트엔드 요청 설명: 요청 방법 설명 POST 요청 경로/사용자/코드 요청 매개변수 전화(전화번호) 반환 값 백엔드 인터페이스 없음 구현: @Slf4j@ ServicepublicclassUserServiceImplextendsServiceImplimplementsIUserService{@OverridepublicResultsendCode(Stringphone,HttpSessionsession){//1인 경우 휴대폰 번호를 확인합니다.

JavaScript와 PHP 쿠키의 차이점은 무엇입니까? JavaScript와 PHP 쿠키의 차이점은 무엇입니까? Sep 02, 2023 pm 12:29 PM

JavaScript쿠키 JavaScript 쿠키를 사용하는 것은 선호도, 구매, 커미션 및 기타 정보를 기억하고 추적하는 가장 효과적인 방법입니다. 더 나은 방문자 경험이나 웹사이트 통계를 위해 필요한 정보입니다. PHPCookieCookies는 클라이언트 컴퓨터에 저장되고 추적 목적으로 보관되는 텍스트 파일입니다. PHP는 HTTP 쿠키를 투명하게 지원합니다. JavaScript 쿠키는 어떻게 작동하나요? 귀하의 서버는 쿠키 형태로 방문자의 브라우저에 일부 데이터를 보냅니다. 브라우저는 쿠키를 허용할 수 있습니다. 존재하는 경우 방문자의 하드 드라이브에 일반 텍스트 기록으로 저장됩니다. 이제 방문자가 사이트의 다른 페이지에 도달하면

See all articles