> 백엔드 개발 > PHP 튜토리얼 > PHP 세션 메커니즘_php 기술 소개 및 사용

PHP 세션 메커니즘_php 기술 소개 및 사용

WBOY
풀어 주다: 2016-05-16 20:38:16
원래의
1132명이 탐색했습니다.

서버가 세션(session_start())을 생성하면 서버는 서버의 지정된 폴더에 sessionID라는 이름의 세션 파일을 생성하고 이를 쿠키 값으로 브라우저에 보냅니다. 브라우저가 서버에 액세스할 때마다 이 쿠키가 전달되며, 서버는 변경된 세션 ID를 인식하고 해당 세션 파일을 찾습니다. 이 파일에는 여러 키-값 쌍이 포함되어 있습니다. 세션 파일이 저장되는 폴더는 구성 파일 php 및 ini에서 수정할 수 있습니다.

쿠키는 페이지가 요청될 때마다 확인됩니다. 사용자 정보가 데이터베이스에 저장되어 있으면 매번 데이터베이스 쿼리를 실행해야 하므로 데이터베이스에 불필요한 부담이 발생합니다. 쿠키는 수정될 수 있으므로 보안 요소가 너무 낮습니다.

세션은 서버측에 저장되는 세션으로 비교적 안전하며 쿠키처럼 저장 길이 제한이 없습니다. Session은 텍스트 파일 형태로 서버 측에 저장되므로 클라이언트가 Session 내용을 수정할 염려가 없습니다. 실제로 서버 측 세션 파일에서 PHP는 세션 파일의 권한을 자동으로 수정하여 시스템 읽기 및 쓰기 권한만 유지하고 ftp를 통해 수정할 수 없으므로 훨씬 안전합니다.

쿠키의 경우 사용자가 로그인했는지 확인하려는 경우 사용자 이름과 비밀번호(md5 암호화 문자열일 수 있음)를 쿠키에 저장하고 페이지가 요청될 때마다 이를 확인해야 합니다.

사용자 이름과 비밀번호가 데이터베이스에 저장되어 있으면 매번 데이터베이스 쿼리를 실행해야 하므로 데이터베이스에 불필요한 부담을 줍니다. 한번의 검증만 할 수는 없기 때문입니다. 왜?

클라이언트 쿠키의 정보가 수정될 수 있기 때문입니다. 사용자의 로그인 여부를 나타내기 위해 $admin 변수를 저장하면, $admin이 true이면 로그인되었음을 의미하고, false이면 로그인하지 않았음을 의미합니다. 처음으로 검증을 통과한 후 $를 저장합니다. admin은 쿠키에서 true이므로 다음번에는 확인할 필요가 없습니다. 예, 맞습니까? 틀렸습니다. 누군가 $admin 변수를 true 값으로 위조하면 그 사람이 즉시 관리 권한을 얻게 된다는 뜻이 아닙니까? 매우 안전하지 않습니다.

세션은 서버 측에 저장되므로 원격 사용자는 세션 파일의 내용을 수정할 수 없으므로 간단히 $admin 변수를 저장하여 로그인 여부를 결정할 수 있습니다. 전달되면 $admin 값을 true로 설정하고 나중에 값이 true인지 확인합니다. 그렇지 않으면 로그인 인터페이스로 이동하여 많은 데이터베이스 작업을 줄일 수 있습니다.

그리고 쿠키를 확인하기 위해 매번 비밀번호를 전달해야 하는 불안감을 줄일 수 있습니다(SSL 보안 프로토콜을 사용하지 않는 경우 세션 확인은 한 번만 전달하면 됩니다). 비밀번호가 md5로 암호화되어 있어도 쉽게 가로챌 수 있습니다.

세션은 사용자를 식별하기 위해 세션을 여는 각 방문자에 대해 고유한 세션 ID를 생성합니다. 세션 ID는 사용자 컴퓨터의 쿠키에 저장되거나 URL을 통해 전달될 수 있습니다. 해당 특정 세션 값은 서버 측에 저장되며 이는 쿠키와의 주요 차이점이기도 하며 보안이 상대적으로 높습니다.

세션 만들기

세션을 생성하거나 기존 세션을 반환하려면 먼저 session_start() 함수를 사용하여 세션을 열어야 하며 시스템에서 세션 ID를 할당합니다.

<&#63;php
session_start();//此函数没有参数,且返回值均为true。最好将这个函数置于最先,而且在它之前不能有任何输出,否则会报警
&#63;>

로그인 후 복사

세션변수 등록

session_register() 함수를 사용하여 세션 변수를 등록하고 성공하면 TRUE를 반환하고, 그렇지 않으면 FALSE를 반환합니다.

구문: bool session_register( 혼합 이름 [, 혼합 ...] )

현재 세션에 하나 이상의 전역 세션 변수를 등록하려면 session_register() 함수를 사용하세요. 매개변수 이름은 추가하려는 변수의 이름입니다. 성공하면 논리값 true가 반환됩니다. $_SESSION[name] 또는 $HTTP_SESSION_VARS[name] 형식을 사용하여 값을 가져오거나 할당할 수 있습니다.

예:

<&#63;php
session_start();
$username = "nostop";
session_register("username");
&#63;>
로그인 후 복사

이 예에서는 username이라는 변수를 session에 등록하고 해당 값은 nostop입니다.

읽기 세션

PHP에 내장된 $_SESSION 변수를 사용하면 설정된 세션 변수에 쉽게 액세스할 수 있습니다.

예:

<&#63;php
session_start();
echo "登记的用户名为:".$_SESSION["username"];  //输出 登记的用户名为:nostop
&#63;>
로그인 후 복사

세션 삭제

session_unregister() 단일 세션 변수 등록 취소
unset($_SESSION['age']); $_SESSION['age']
에 등록된 세션 변수를 등록 취소하는 데 사용됩니다. session_unset()은 등록된 모든 변수를 삭제합니다
session_destroy() 모든 세션 변수를 로그아웃하고 전체 세션을 로그아웃합니다

예:

<&#63;php
session_start();
session_unregister("username");  //注销 session 某个变量
session_unset();     //注销 session 会话
&#63;>
로그인 후 복사


해당 변수가 세션 변수로 등록되었는지 확인하세요

session_is_registered

구문: boobean session_is_registered(문자열 이름);

이 함수는 지정된 변수가 현재 세션에 등록되었는지 확인할 수 있습니다. 성공하면 논리값 true가 반환됩니다.

예:

<&#63;php
  session_start();
  if(!session_is_registered("gender")){ //判断当前会话变量是否注册
    session_register("gender");  //注册变量
  }
  $gender="女";
  echo $_SESSION['gender']; //女
&#63;>
로그인 후 복사


存取当前会话名称

session_name

语法:boolean session_name(string [name]);

这个函数可取得或重新设置当前session的名称。若无参数name则表示获取当前session名称,加上参数则表示将session名称设为参数name。

例子:

<&#63;php

$sessionName = session_name();  //取得当前 Session 名,默认为 PHPSESSID
$sessionID = $_GET[$sessionName];  //取得 Session ID
session_id($sessionID);   //使用 session_id() 设置获得的 Session ID
&#63;>

로그인 후 복사

存取当前会话标识号

session_id

语法:boolean session_id(string [id]);

这个函数可取得或重新设置当前存放session的标识号。若无参数id则表示只获取当前session的标识号,加上参数则表示将session的标识号设成新指定的id。

设置 Session 的生存期

setcookie:向客户端发送一个 HTTP cookie。

<&#63;php
  session_start
  // 保存一天
  $lifeTime = 24 * 3600;
  setcookie(session_name(), session_id(), time() + $lifeTime, "/");
&#63;>
로그인 후 복사

session_set_cookie_params:设置 Session 的生存期的,该函数必须在 session_start() 函数调用之前调用。
如果客户端使用 IE 6.0 , session_set_cookie_params(); 函数设置 Cookie 会有些问题,所以我们还是手动调用 setcookie 函数来创建 cookie。

// 保存一天

<&#63;php
  $lifeTime = 24 * 3600;
  session_set_cookie_params($lifeTime);
  session_start();
  $_session["admin"] = true;
&#63;>
로그인 후 복사

设置 Session 文件的保存路径

session_save_path() :必须在 session_start() 函数调用之前调用。

<&#63;php
  // 设置一个存放目录
  $savePath = "./session_save_dir/";
  // 保存一天
  $lifeTime = 24 * 3600;
  session_save_path($savePath);
  session_set_cookie_params($lifeTime);
  session_start();
  $_session["admin"] = true;
&#63;>
로그인 후 복사
<&#63;php
session_start();  //启动Session
$username='nostop';
session_register('username');  //注册一个名为username变量
echo '登记的用户:'.$_SESSION['username'];  //登记的用户:nostop  读取Session变量

$_SESSION['age']=23;  //声明一个名为age的变量,并赋值
echo '年龄:'.$_SESSION['age']; //年龄:23

session_unregister('username'); //注销Session变量
echo $_SESSION['username']; //空
echo $_SESSION['age'];//23

unset($_SESSION['age']); //注销Session变量
echo '登记的用户:'.$_SESSION['username']; //空
echo '年龄:'.$_SESSION['age']; //空
&#63;>
로그인 후 복사
관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿