> 백엔드 개발 > PHP 튜토리얼 > PHP는 세션 control_php 예제를 통해 인증 예제를 구현합니다.

PHP는 세션 control_php 예제를 통해 인증 예제를 구현합니다.

WBOY
풀어 주다: 2023-03-02 22:46:02
원래의
1286명이 탐색했습니다.

세션 제어의 개념은 웹사이트의 세션을 기반으로 사용자를 추적할 수 있다는 것입니다. 자세한 코드는 여기에 정리되어 있어 도움이 필요한 친구들이 참조할 수 있습니다.

개요

http 프로토콜은 상태 비저장이며 각 요청에 대해 서버는 사용자를 구별할 수 없습니다. PHP 세션 제어는 사용자의 신원을 증명하는 키(암호화된 세션 문자열)를 제공합니다. 서버는 이 키로 열 수 있는 상자(데이터베이스, 메모리 데이터베이스 또는 파일)를 저장합니다. 사용자의 다양한 변수정보.

기존 PHP 세션 사용법

<&#63;php
//page1.php 启动一个会话并注册一个变量
session_start();
$_SESSION['user_var'] = "hello,codekissyoung!";
//这里的可以将$_SESSION理解为用户的箱子,实际的实现是php在服务器端生成的小文件
&#63;>
로그인 후 복사
<&#63;php
//page2.php
session_start();
echo $_SESSION['user_var'];//通过钥匙访问自己的箱子内的变量
$_SESSION['user_var'] = "bey,codekissyoung!";
&#63;>
로그인 후 복사
<&#63;php
//page3.php 销毁钥匙,一般在用户注销时,访问page3.php文件
session_start();
session_destroy();
&#63;>
로그인 후 복사

질문해보세요. 열쇠는 어디에 있나요? 사용자에게 키를 주는 동작을 못 보셨나요?

이 작업은 뒤에서 PHP에 의해 수행됩니다. page1.php를 방문하여 session_start(); 프로그램을 실행하면 PHP는 현재의 일부 조건(사용자 IP, 브라우저 번호, 시간)에 따라 이를 생성합니다. 등) PHPSESSID 변수입니다. http 응답이 클라이언트에 반환된 후 이 PHPSESSID는 이미 브라우저 쿠키에 저장되어 있습니다. 이 도메인 이름을 다시 방문할 때마다 PHPSESSID가 서버로 전송됩니다. 이 PHPSESSID는 제가 여기서 말하는 사용자 키입니다.

한 가지 더 질문입니다. 이 PHPSESSID의 보안은 도난당하기 쉬운가요, 위조되기 쉬운가요, 변조되기 쉬운가요?

HTTPS를 사용하면 변조를 방지할 수 있습니다. PHPSESSID를 사용하지 말고, 위조 방지를 위해 사용자용 비밀키를 생성하세요. 도난당하기 쉬운지에 대해서는 실제로 연구된 바가 없습니다. 예를 들어, 컴퓨터가 인터넷에 연결되어 있고 해커가 컴퓨터에 침입하는 경우입니다.

생성된 비밀키를 브라우저 쿠키에 저장

  • 쿠키 설정
  • setCookie('키','값',time()+3600);
  • 쿠키 삭제
  • setCookie('key','',time()-1);

Single Sign-On 달성: 세션 공유

Single Sign-On: 여러 하위 시스템이 사용자 인증 시스템을 공유합니다. 한 곳에서 로그인하면 모든 하위 시스템에 액세스할 수 있습니다.

이 시나리오를 상상해 보세요. 서버 A와 B의 PHP 환경이 동일하다고 가정합니다. 사용자는 서버 A에서 키를 얻은 다음 서버 B에 액세스하기 위해 키를 가져갔습니다. 그는 서버 B를 알고 있습니까?

분명히 그렇지 않습니다. 서버 A에서 생성된 키는 서버에서 인식되지 않습니다.

해결책: 사용자가 A 또는 B에 액세스하는지에 관계없이 생성된 키를 C(동일한 데이터베이스 또는 캐시 시스템)에 저장합니다. 사용자가 A 또는 B에 다시 액세스하면 A와 B 모두 C에게 다음과 같이 묻습니다. 사용자 키가 맞나요? 맞다면 사용자는 A나 B에 보관된 상자를 사용할 수 있습니다.

<&#63;php
session_regenerate_id();//重置 session  字符
$session_info=array('uid'=>$uid,'session'=>session_encrypt(session_id().time()));
//下一步将,$session_info 存到 C 中
&#63;>
로그인 후 복사

다음은 세션 제어를 통한 PHP 인증 예시입니다

인증 적용 주체: authmain.PHP

<&#63;php 
//开启一个会话 
session_start(); 
 
if((!isset($userid))||(!isset($password))) { 
  $userid=$_POST['userid']; 
  $password=$_POST['password']; 
//连接数据库 
$db_conn=new mysqli("localhost", "root", "","auth"); 
if(mysqli_connect_errno()){ 
  echo '连接数据库失败:'.mysqli_connect_error(); 
  exit(); 
} 
//执行SQL查询语句 
$query="SELECT * FROM authorized_users WHERE name='".$userid."' and password=sha1('".$password."')"; 
$result=$db_conn->query($query); 
if($result->num_rows>0){ 
  //注册一个会话变量 
  $_SESSION['valid_user']=$userid; 
} 
//断开数据库连接 
$db_conn->close(); 
} 
&#63;> 
<!DOCTYPE html> 
<html> 
<head> 
  <meta charset="UTF-8"> 
  <title>身份验证</title> 
</head> 
<body> 
<h1>主页</h1> 
<&#63;php 
//判断用户是否已经登录 
if(isset($_SESSION['valid_user'])){ 
  echo $_SESSION['valid_user'].',您好,你已经登录'; 
  echo '<a href="logout.php">退出登录</a><br/>'; 
}else{ 
  if(isset($userid)){ 
    echo '您没有登录成功'; 
  }else{ 
    echo '您还没有登录<br/>'; 
  } 
  &#63;> 
  <form method="post" action="authmain.php"> 
    <p>用户名:<input type="text" name="userid"></p> 
 
    <p>密码:<input type="password" name="password"></p> 
 
    <p><input type="submit" name="submit" value="登录"></p> 
  </form> 
<&#63;php 
} 
&#63;> 
<br/> 
<a href="members_only.php">登录进入</a> 
 
</body> 
</html> 
로그인 후 복사

웹사이트에 대한 유효한 사용자 확인:members_only.php

<!DOCTYPE html> 
<html> 
<head> 
  <meta charset="UTF-8"> 
  <title>身份验证</title> 
</head> 
<body> 
<&#63;php 
//启用会话 
session_start(); 
 
echo '<h1>会员有效</h1>'; 
if(isset($_SESSION['valid_user'])){ 
  echo "<p>".$_SESSION['valid_user'].",您好,您已经登录成功</p>"; 
  echo '<p>会员可享受折扣优惠</p>'; 
}else{ 
  echo '<p>您还没有登录成功</p>'; 
  echo '<p>只有登录成功才能查看此页</p>'; 
} 
echo '<a href="authmain.php">返回主页</a>'; 
&#63;> 
</body> 
</html> 
로그인 후 복사

세션 변수를 로그아웃하고 세션을 삭제합니다: logout.php

<&#63;php 
//启用会话 
session_start(); 
$olduser=$_SESSION['valid_user']; 
//注销会话变量 
unset($_SESSION['valid_user']); 
//销毁会话 
session_destroy(); 
&#63;> 
<!DOCTYPE html> 
<html> 
<head> 
  <meta charset="UTF-8"> 
  <title>退出登录</title> 
</head> 
<body> 
<h1>您退出登录了!</h1> 
<&#63;php 
if(!empty($olduser)){ 
  echo '退出登录了<br/>'; 
}else{ 
  echo '您没有登录过,所以当然也不存在退出登录<br/>'; 
} 
&#63;> 
<a href="authmain.php">返回主页</a> 
</body> 
</html> 
로그인 후 복사

위 글의 내용은 모두의 공부에 도움이 되길 바랍니다.

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