iT邦幫忙

2021 iThome 鐵人賽

DAY 30
0
Software Development

PHP 語法通關系列 第 30

Day30 來點不一樣的Cookie與Session && 完賽心得

  • 分享至 

  • xImage
  •  

利用URL傳送Session的原理

如果我們用瀏覽器關閉Cookie,那麼Session也無法運作,這時候沒辦法使用Session,不過我們可以換另外一種方式也能讓我們使用。

  • login.html:簡單的login form表單
  • login.php
echo '<a href="./index.php?SESSID=' . session_id() . '">登錄成功點我跳轉</a>';

這邊做了修改,在跳轉的時候就傳值,傳入SESSID

<?php
//手動開啟session
session_start();

if ($_POST['name'] == 'winnie' && $_POST['pwd'] == 'admin') {
	$_SESSION['user']['islogin'] = true;
	$_SESSION['user']['name'] = $_POST['name'];
	$_SESSION['user']['pwd'] = $_POST['pwd'];
	//var_dump($_COOKIE);
	//登錄成功
	// echo '<script>alert("登錄成功");location="./index.php"</script>';
	echo '<a href="./index.php?SESSID=' . session_id() . '">登錄成功點我跳轉</a>';
} else {
	//登錄失敗跳轉註冊頁面
}
  • index.php
    • 這邊~~ 要先獲取session_id,在剛剛我們設置跳傳的時候傳值,所以可以$_GET['SESSID'],因此可以直接設置session_id,接著可以印出來
    • //設置id
      session_id($_GET['SESSID']);
    • //獲取
      echo session_id();
      當然別忘記要開啟session,只是設置id一定要先唷!!!!! 順序別弄混~
<?php
	//設置id
	session_id($_GET['SESSID']);
	//開啟session
	session_start();
	
	//獲取
	echo session_id();
	//var_dump($_COOKIE);
	//這是項目的首頁
	if(isset($_SESSION['user']['islogin']) && $_SESSION['user']['islogin'] ==  true){
		//已經登錄
		echo '親愛的'.$_SESSION['user']['name'].'會員,歡迎您回來<br/>';

		echo '<a href="a.php?SESSID='.$_GET['SESSID'].'">去a頁面</a><br/>';
		echo '<a href="b.php?SESSID='.$_GET['SESSID'].'">去b頁面</a><br/>';
		echo '<a href="c.php?SESSID='.$_GET['SESSID'].'">去c頁面</a><br/>';
	}else{
		//用戶沒有登錄
		echo '對不起,您無權訪問3S後自動跳轉到登錄頁面';
		echo '<meta http-equiv="refresh" content="3;url=./login.html">';
	}
  • c.php
    • 這邊一樣傳值的時候別忘記傳 SESSID
    • PS. a.php b.php兩個頁面這次就不放了,類似c.php
<?php
	session_id($_GET['SESSID']);
	session_start();
	echo session_id();
	if(isset($_SESSION['user']['islogin']) && $_SESSION['user']['islogin'] ==  true){
		//已經登錄
		echo '親愛的'.$_SESSION['user']['name'].'會員,歡迎您回來<br/>';
		echo '當前是c頁面<br/>';
		echo '<a href="index.php?SESSID='.$_GET['SESSID'].'">去首頁</a><br/>';
		echo '<a href="a.php?SESSID='.$_GET['SESSID'].'">去a頁面</a><br/>';
		echo '<a href="b.php?SESSID='.$_GET['SESSID'].'">去b頁面</a><br/>';
		echo '<a href="logout.php">退出登錄</a>';
	}else{
		//用戶沒有登錄
		echo '對不起,您無權訪問3S後自動跳轉到登錄頁面';
		echo '<meta http-equiv="refresh" content="3;url=./login.html">';
	}
  • logout.php
    • 沒有變
<?php
	session_start();
	//1.清除當前session數組中的值
	$_SESSION['user'] = ARRAY();
	//獲取session的名稱
	//echo session_name();exit;
	//2.讓sessionid失效
	setcookie(session_name(),null,time()-1,'/');
	//刪除session文件
	session_destroy();

	echo '<script>alert("已退出");location="./login.html"</script>';

強調:Session

  1. 將ID存入到Cookie的文件中,然後內容存放到服務器裡。

  2. 如果禁用Cookie的時候Session還能使用?

    • 答案:不能,但是我們可以通過另一種方式來實現(URL傳輸的方式)

完賽心得:

這30天,真的經常在極限,每天趕稿,但同時也收穫許多成就感,有些之前沒有弄懂的觀念,藉由寫文章慢慢弄懂了,以及更加清楚知道自己哪裡不足,真的蠻開心的,也完賽了~
其實原本還想寫TODOLIST小練習,還有LINUX的指令,但剛好篇幅到這邊完結,也許剩下未寫的就是等待下一次開賽XD


上一篇
Day29 Session 的使用-2
系列文
PHP 語法通關30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
wendy
iT邦新手 2 級 ‧ 2021-10-16 00:28:14

恭喜你完賽~ /images/emoticon/emoticon08.gif

桃熊 iT邦新手 3 級 ‧ 2021-11-01 08:08:30 檢舉

謝謝~~也恭喜你XD

我要留言

立即登入留言