이 글에서는 주로 PHP 대화 메커니즘 쿠키와 세션에 대해 설명합니다.
쿠키 소개
쿠키는 고객의 브라우저에 저장되는 데이터로, 사용자 데이터를 추적하고 저장하는 데 사용됩니다. 일반적으로 쿠키는 HTTP 헤더를 통해 서버에서 클라이언트로 반환됩니다. 대부분의 웹 프로그램은 쿠키의 동작을 지원하는데, 쿠키는 HTTP 헤더에 존재하기 때문에 헤더 기능의 사용 제한과 유사하게 다른 정보를 출력하기 전에 쿠키를 설정해야 합니다.
PHP는 setcookie 함수를 사용하여 브라우저에서 다시 전송된 모든 쿠키는 PHP에 의해 $_COOKIE의 전역 변수에 자동으로 저장되므로 $_COOKIE['key'] 형식을 사용할 수 있습니다. .
PHP의 쿠키는 매우 널리 사용되며 사용자의 로그인 정보, 장바구니 등을 저장하는 데 자주 사용됩니다. 세션을 사용할 때 쿠키는 일반적으로 사용자를 식별하기 위해 세션 ID를 저장하는 데 사용됩니다. 유효 기간이 만료되면 쿠키는 클라이언트에서 자동으로 삭제됩니다. 동시에 쿠키는 보안 제어를 위해 도메인과 경로를 설정할 수도 있습니다. 이에 대해서는 이후 장에서 자세히 설명하겠습니다.
웹사이트 보안을 위해 이 사이트는 당분간 쿠키 변수 표시 기능을 제공하지 않습니다. 로컬에서 테스트해 보세요.
쿠키 설정
PHP에서 쿠키를 설정하는 가장 일반적인 방법은 다음과 같습니다. setcookie 함수에는 7가지 옵션이 있습니다. 매개변수 선택, 일반적으로 처음 5개를 사용합니다.
name(쿠키 이름)은 $_COOKIE['name']을 통해 액세스할 수 있습니다.
value(쿠키 값)
expire(만료 시간) Unix 타임스탬프 형식, 기본값은 0이므로 브라우저를 닫으면 유효하지 않습니다
경로(유효 경로) 경로를 '/'로 설정하면 웹사이트 전체가 유효
도메인(유효 도메인) 기본적으로 , 'www.imooc이 .com으로 설정되어 있으면' 전체 도메인 이름이 유효합니다. www 하위 도메인에서만 유효합니다
$value = 'test'; setcookie("TestCookie", $value); setcookie("TestCookie", $value, time()+3600); //有效期一小时 setcookie("TestCookie", $value, time()+3600, "/path/", "imooc.com"); //设置路径与域
PHP에서 쿠키를 설정하는 setrawcookie 함수도 setcookie와 동일합니다. 유일한 차이점은 값이 자동으로 Urlencode되지 않으므로 필요한 경우 Urlencode를 수동으로 수행해야 한다는 것입니다.
setrawcookie('cookie_name', rawurlencode($value), time()+60*60*24*365);
쿠키는 HTTP 헤더를 통해 설정되기 때문에 헤더 방식을 사용하여 직접 설정할 수도 있습니다.
header("Set-Cookie:cookie_name=value");
쿠키 삭제 및 만료 시간
이전 장을 통해 쿠키 설정 기능에 대해 배웠지만 PHP에서는 쿠키 삭제 기능이 없다는 사실을 발견했습니다. PHP에서 쿠키 삭제도 setcookie를 사용하여 구현됩니다. 기능.
setcookie('test', '', time()-1);
쿠키의 만료 시간을 현재 시간 이전으로 설정하면 쿠키가 자동으로 만료되어 쿠키 삭제 목적이 달성되는 것을 볼 수 있습니다. 이러한 설계의 이유는 쿠키가 HTTP 헤더를 통해 전달되기 때문입니다. 클라이언트는 서버에서 반환된 Set-Cookie 세그먼트를 기반으로 쿠키를 설정합니다. 쿠키를 삭제하려면 새로운 Del-Cookie를 사용해야 합니다. 실제로, 쿠키의 설정, 업데이트, 삭제는 Set-Cookie를 통해 간단하고 명확하게 이루어질 수 있습니다.
원칙을 이해한 후 헤더를 통해 직접 쿠키를 삭제할 수도 있습니다.
header("Set-Cookie:test=1393832059; expires=".gmdate('D, d M Y H:i:s \G\M\T', time()-1));
gmdate는 여기서 시차의 영향을 제거하기 위해 그리니치 표준시를 생성하는 데 사용됩니다.
세션과 쿠키의 유사점과 차이점
쿠키는 클라이언트에 데이터를 저장하고 사용자와 서버 간의 연결을 설정하지만 일반적으로 많은 문제를 해결할 수 있지만 쿠키에는 여전히 몇 가지 제한 사항이 있습니다.
쿠키는 상대적으로 그렇지 않습니다. 매우 안전합니다. 도난당하거나 쿠키 스푸핑으로 이어질 수 있습니다.
단일 쿠키의 값은 최대 4k까지만 저장할 수 있습니다.
모든 요청에는 네트워크 전송이 필요하며, 이는 대역폭을 차지합니다
세션은 사용자의 세션 데이터를 저장하기 위한 것입니다. 서버 측에서는 크기 제한 없이 session_id를 통해 사용자 식별을 수행합니다. 기본적으로 PHP 세션 ID는 쿠키를 통해 저장되므로 seesion은 어느 정도 쿠키에 의존합니다. 그러나 이것이 절대적인 것은 아닙니다. 세션 ID는 식별을 위해 서버에 전달될 수 있는 한 매개변수를 통해 구현될 수도 있습니다.
세션 사용
PHP에서 세션을 사용하는 방법은 매우 간단합니다. 먼저 session_start 메서드를 실행하여 세션을 연 다음 전역 변수 $_SESSION을 통해 세션을 읽고 씁니다.
session_start(); $_SESSION['test'] = time(); var_dump($_SESSION);
Session은 설정할 값을 자동으로 인코딩 및 디코딩하므로 세션은 데이터 및 객체를 포함한 모든 데이터 유형을 지원할 수 있습니다.
session_start(); $_SESSION['ary'] = array('name' => 'jobs'); $_SESSION['obj'] = new stdClass(); var_dump($_SESSION);
기본적으로 세션은 파일 형식으로 서버에 저장되므로 페이지에서 세션이 열리면 세션 파일을 독점적으로 차지하므로 현재 사용자의 다른 동시 액세스가 불가능합니다. 실행하고 기다리십시오.
세션 삭제 및 삭제
특정 세션 값을 삭제하려면 PHP의 unset 함수를 사용하면 됩니다. 삭제 후에는 전역 변수 $_SESSION에서 제거되어 액세스할 수 없습니다.
session_start(); $_SESSION['name'] = 'jobs'; unset($_SESSION['name']); echo $_SESSION['name']; //提示name不存在
모든 세션을 삭제하려면 session_destroy 함수를 사용하여 현재 세션을 삭제할 수 있습니다. session_destroy는 모든 데이터를 삭제하지만 session_id는 여전히 존재합니다.
session_start(); $_SESSION['name'] = 'jobs'; $_SESSION['time'] = time(); session_destroy();
值得注意的是,session_destroy并不会立即的销毁全局变量$_SESSION中的值,只有当下次再访问的时候,$_SESSION才为空,因此如果需要立即销毁$_SESSION,可以使用unset函数。
session_start(); $_SESSION['name'] = 'jobs'; $_SESSION['time'] = time(); unset($_SESSION); session_destroy(); var_dump($_SESSION); //此时已为空
如果需要同时销毁cookie中的session_id,通常在用户退出的时候可能会用到,则还需要显式的调用setcookie方法删除session_id的cookie值。
使用session来存储用户的登录信息
session可以用来存储多种类型的数据,因此具有很多的用途,常用来存储用户的登录信息,购物车数据,或者一些临时使用的暂存数据等。
用户在登录成功以后,通常可以将用户的信息存储在session中,一般的会单独的将一些重要的字段单独存储,然后所有的用户信息独立存储。
$_SESSION['uid'] = $userinfo['uid']; $_SESSION['userinfo'] = $userinfo;
一般来说,登录信息既可以存储在sessioin中,也可以存储在cookie中,他们之间的差别在于session可以方便的存取多种数据类型,而cookie只支持字符串类型,同时对于一些安全性比较高的数据,cookie需要进行格式化与加密存储,而session存储在服务端则安全性较高。
위 내용은 PHP 세션 기술에는 주로 무엇이 포함되나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!