JavaScript基礎,Cookies,Sessions

PHP全棧學習筆記4

php和JavaScript,掌握JavaScript基礎,自定義函數,流程控制語句,事件,調用JavaScript腳本,在PHP中使用JavaScript。javascript

JavaScript是網景公司開發的,是一種基於對象和事件驅動並具備安全性能的解釋型腳本語言。php

JavaScript基礎,數據類型,變量,註解css

數據類型,unll,undefined,對象型,布爾型,數值型,字符串型。html

變量,指在程序中已經存在的命名存儲單元,存放信息的容器。java

abstract, continue, finally, instanceof, private, this class, final, in, package, synchronized, with char, false, import, null, switch, while catch, extends, implements, new, super, void case, else, goto, native, static, var byte, double, function, long, short, true break, do, for, interface, return, typeof boolean, default, float, int, public, throw

自定義函數mysql

function 函數名([參數]){ return var; } 函數名();

流程控制語句:nginx

條件語句sql

if(條件表達式){ 語句塊  } if(條件表達式)   { 語句塊1;   } else   { 語句塊2;   } switch(表達式或變量){ case 常量表達式1: 語句塊1; break; case常量表達式2: 語句塊2; break; … case常量表達式n: 語句塊n; break; default: 語句塊n+1; break; } 
<script language="javascript"> function check(){ var year1 = form.year.value; if((year1%4==0&&(year1%100)!=0){} } </script>

循環語句shell

while(條件表達式){ 語句塊 }  for (初始化循環變量;循環條件;肯定循環變量的改變值){ 語句塊;  }

跳轉語句,break語句終止循環,continue語句跳出本次循環,進入下一次循環。數據庫

事件

onclick 鼠標點擊事件 ondblclick 鼠標雙擊事件 onmousedown 鼠標按下事件 onmouseup 鼠標按下後鬆開事件 onmouseover 鼠標移動到某對象上方事件 onmousemove 鼠標移動時觸發事件 onkeypress 鍵盤按下且釋放事件 onkeydown 鍵盤按下事件 onkeyup 鍵盤按下後鬆開時觸發的事件 onabort 圖片在下載時被用戶中斷時觸發 onload 頁面內容完成時觸發 onresize 瀏覽器窗口大小被改變 onunload 當前頁面將被改變時觸發此事件 onblur 失去焦點 onchange 內容發生改變 onfocus 獲取焦點 onreset 和 onsubmit

嵌入JavaScript腳本

<script language="javascript"></script> <input type="submit" name="Submit" value="檢測" onClick="check();"> <script src=url language="Javascript"></script>
<script language="javascript"> function check(){ if(myform.subject.value==""){ alert("文章主題不能爲空!!");myform.subject.focus();return false; } if(myform.content.value==""){ alert("文章內容不能爲空!!");myform.content.focus();return false; } if(myform.author.value==""){ alert("做者不能爲空!!");myform.author.focus();return false; } alert("成功經過驗證!"); } </script>

系統時區設置,PHP日期和時間函數,應用

image.png

image.png

mktime()函數將一個時間轉換成UNIX的時間戳值

int mktime(int hour, int minute, int second, int month, int day, int year, int [is_dst] )
hour 小時數, minute 分鐘數,second秒數,month月份數,day天數,year年份數,is_dst在夏令時設置爲1,不是爲0,不肯定爲-1

獲取時間戳

int time ( void )

獲取當前日期和時間

date(string format,int timestamp)

image.png

獲取日期信息

array getdate(int timestamp)

image.png

檢驗日期的有效性

bool checkdate(int month,int day,int year)

輸出格式化的日期和時間
image.png

Y-m-d H:i:s

顯示本地化的日期和時間
setlocale()函數設置本地化環境
strftime()函數格式化輸出日期和時間

string setlocale(string category, string locale)

image.png

string strftime(string format, int timestamp)

image.png

image.png

將日期和時間解析爲UNIX時間戳

int strtotime ( string time [, int now] ) 將任何英文文本的日期和時間解析爲UNIX時間戳

image.png

比較時間,要將時間解析爲時間戳,strtotime()函數

<?php $time1 = date("Y-m-d H:i:s"); $time2 = "2006-6-6 10:30:00"; echo "變量1的時間爲:".$time1."<br>"; echo "變量2的時間爲:".$time2."<p>"; if(strtotime($time1) - strtotime($time2) < 0){ echo "\$time1 早於 \$time2 "; }else{ echo "\$time2 早於 $time1 "; } ?>
<?PHP $time1 = strtotime(date( "Y-m-d H:i:s")); $time2 = strtotime("2010-5-2 12:10:00"); $time3 = strtotime("2014-2-4"); $sub1 = ceil(($time2 - $time1) / 3600); //60 * 60 $sub2 = ceil(($time3 - $time1) / 86400); //60 * 60 * 24 echo "離放假還有$sub1 小時!!!" ; echo "<p>"; echo "離元旦還有$sub2 天!!!"; ?> 

計算頁面腳本的運行時間

string microtime(void)

image.png

image.png

利用cookie來區別不一樣用戶

Cookie是一種在遠程瀏覽器端存儲數據並以此來跟蹤和識別用戶的機制。

文本文件的命令格式以下:
用戶名@網站地址[數字].txt

image.png

建立cookie:

bool setcookie(string name[,string value[,int expire[, string path[,string domain[,int secure]]]]])

image.png

<?php setcookie("TMCookie","www.dashucoding.cn"); setcookie("TMCookie","www.dashucoding.cn", time()+60); // 有效時間設置 60秒,目錄"/tm/", 域名 setcookie("TMCookie", $value, time() + 3600, "/tm/", ".dashucoding.cn", 1); ?>

讀取cookie

<?php if(!isset($_COOKIE["visittime"])){ setcookie("visittime",date("y-m-d H:i:s")); echo "歡迎第一次"; }else{ setcookie("visittime",date("y-m-d H:i:s"), time()+60); echo "上次訪問".$_COOKIE["visittime"]; echo "<br>" } echo "本次訪問".date("y-m-d H:i:s"); ?>

刪除cookie:使用setcookie()函數刪除,手動刪除(在瀏覽器中手動刪除Cookie)

setcookie("name","", time()-1);

瀏覽器最多容許存儲300個Cookie文件,每一個Cookie文件支持最大容量爲4KB,每一個域名最多支持20個Cookie。

image.png

image.png

啓動會話→註冊會話→使用會話→刪除會話

session_start ()函數建立會話:

bool session_start(void)

經過session_register()函數建立會話用來爲會話建立一個變量來隱含地啓動會話。使用這個函數,不用調用session_start()函數,由於hi隱含地調用session_start()函數。

註冊會話:

<?php session_start(); //啓動Session $_SESSION["admin"] = null; //聲明一個名爲admin的變量,並賦空值 ?>

使用會話:

<?php if ( !empty ( $_SESSION['session_name'])) //判斷用於存儲用戶名的Session會話變量是否爲空 $myvalue = $_SESSION['session_name'] ;//將會話變量賦給一個變量$myvalue ?> if (! isset ( $_SESSION )) { session_start (); } if (! isset ( $_SESSION ['userName'] )) { header ( "location:login.php" ); } $userName = $_SESSION ['userName'];

刪除會話
刪除單個會話、刪除多個會話和結束當前會話

刪除單個會話

unset ( $_SESSION['user'] ) ;

刪除多個會話

$_SESSION = array() ;

結束當前會話

session_destroy() ;

Session設置時間

使用session_set_cookie_params()設置Session的失效時間
使用setcookie()函數可對Session設置失效時間

<?php $time = 1*60; session_set_cookie_params($time); session_start(); $_SESSION[username] = "mr" ?>
<?php session_start(); $time=1*60; setcookie(session_name(), session_id(), time()+$time,"/"); $_SESSION['user']='mr'; ?>

客戶端禁止Cookie:

設置php.ini文件中的session.use_trans_sid = 1
編譯時打開-enable-trans-sid選項,讓PHP自動跨頁面傳遞session_id 隱藏表單傳遞session_id
<form id="form1" name="form1" method="post" action="xx.php?<?=session_name();?>=<?=session_id();?>"> <?php $sess_name = session_name(); $sess_id = $_GET[$sess_name]; session_id($sess_id); session_start(); $_SESSION['admin']='mr'; ?>

頁面a傳值到頁面b:

image.png

頁面a傳值給頁面b,頁面c,頁面d等,,,如何作?

image.png

可是用cookie不安全,若是有人修改就很是危險了。

image.png

加密。使用哈希函數MD5:
MD5(uid+一個固定的隨機的字符串)

if (! isset ( $_SESSION )) { session_start (); } if (! isset ( $_SESSION ['userName'] )) { header ( "location:login.php" ); } $userName = $_SESSION ['userName'];

登陸劃分

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <title>博客用戶登陸</title> <style type="text/css"> <!-- .style1 {color: #FF0000} --> </style> </head> <body> <script language="javascript"> function check(form){ if(form.user.value==""){ alert("請輸入用戶名");form.user.focus();return false; } if(form.pwd.value==""){ alert("請輸入密碼");form.pwd.focus();return false; } form.submit(); } </script> <form name="form1" method="post" action="default.php"> <table width="521" height="394" border="0" cellpadding="0" cellspacing="0"> <tr> <td valign="top" background="images/login.jpg"><table width="521" border="0" cellspacing="0" cellpadding="0"> <tr> <td width="262" height="218">&nbsp;</td> <td width="259">&nbsp;</td> </tr> <tr> <td height="24" align="right">用戶名:</td> <td height="24" align="left"><input name="user" type="text" id="user" size="20"></td> </tr> <tr> <td height="24" align="right">密&nbsp;&nbsp;碼:</td> <td height="24" align="left"><input name="pwd" type="password" id="pwd" size="20"></td> </tr> <tr align="center"> <td height="24" colspan="2"><input type="submit" name="Submit" value="提交" onClick="return check(form);"> &nbsp;&nbsp; <input type="reset" name="Submit2" value="重填"></td> </tr> <tr> <td height="76" align="right"><span class="style1">超級用戶:tsoft<br> 密&nbsp;&nbsp;&nbsp;&nbsp;碼:111&nbsp;&nbsp;</span></td> <td><span class="style1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;普通用戶:zts<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;密&nbsp;&nbsp;&nbsp;&nbsp;碼:000</span></td> </tr> </table></td> </tr> </table> </form> </body> </html>
<?php session_start(); $_SESSION[user]=$_POST[user]; $_SESSION[pwd]=$_POST[pwd]; if($_SESSION[user]==""){ echo "<script language='javascript'>alert('請經過正確的途徑登陸本系統!');history.back();</script>"; } ?> <?php if($_SESSION[user]=="123" && $_SESSION[pwd]=="123456"){echo "管理員";}else{echo "普通用戶";}?>
<a href="safe.php">註銷用戶</a> <?php session_start(); unset($_SESSION['user']); unset($_SESSION['pwd']); session_destroy(); header("location:index.php"); ?>

Session高級應用

session是將session的信息保存在服務器上,經過session id來傳遞客戶端的信息,同時服務器接收到session id後,根據這個id來提供相關的session信息資源。

cookie是將信息以文本文件的形式保存在客戶端,經過瀏覽器進行管理和維護。

若是將session保存到臨時目錄中,會下降服務器的安全性和效率,使用session_save_path()函數解決session臨時文件問題。

<?php
$path="./tmp/'; session_save_path($path); session_start(); $_SESSION[username]=true; ?>

Session緩存

string session_cache_limiter ( [string cache_limiter])
int session_cache_expire ( [int new_cache_expire])

cookie和session區別和小結

cookie是經過擴展http協議實現的,主要包括有名字,值,過時時間,路徑和域。若是cookie不設置時間,就以瀏覽器關閉而關閉,cookie通常存儲在內存中,不是在硬盤上,設置了時間,不隨瀏覽器的關閉而消失,cookie仍然有效到超過設定的過時時間。

session和session id,保存session id的方式能夠採用cookie,cookie數據存放在瀏覽器上,session數據放在服務器上,cookie不安全,session安全,session會在必定時間內保存在服務器上,訪問多了,會佔用服務器的性能,考慮到減輕服務器性能,應該使用cookie。

瀏覽器最多容許存儲300個cookie文件,每一個cookie文件最多保存數據不能超過4kb,不少瀏覽器都限制一個站點最多保存20個cookie,每一個域名最多支持20個cookie。若是超過,瀏覽器會自動刪除cookie文件。

登陸信息等重要信息保存在session中,不重要的保存在cookie中。保存在session中,很容易丟失,因此要結合cookie中,當session丟失時,若是cookie還在咱們設定的有效期內,就能夠再一次從cookie中取出值放進session裏,

<sessionState timeout="5" mode="InProc" /> <sessionState timeout="2" mode="StateServer" /> cookie有效期的設置 httpCookie.Expires = DateTime.Now.AddMinutes(2); 是否有權限訪問該網頁 if (Request.Cookies["httpCookie"] != null) { Session["admin"] = Request.Cookies["httpCookie"].Values["admin"].ToString(); } if (Session["admin"] == null) { this.ClientScript.RegisterStartupScript(this.GetType(), "", "<script>alert('請從新登 錄');location.href='logins.aspx'</script>"); }

PHP禁用Cookie以後Session還能用嗎?能。
在登陸以前提醒用戶必須打開cookie。
設置php.ini配置文件中的「session.use_trans_sid = 1」,或者編譯時打開打開了「--enable-trans-sid」選項,讓PHP自動跨頁傳遞Session ID。
手動經過URL傳值,隱藏表單傳遞Session ID。
用文件、數據庫等形式保存Session ID,在跨頁過程當中手動調用。

COOKIE和SESSION的使用

建立cookie值:

// 函數設置Cookie Setcookie("標識鍵值","Cookie值","有效時間","有效做用域 / 表示當前網站下好使"); // 賦值設置Cookie $_COOKIE['標識鍵值'] = "Cookie值";

修改Cookie值:

// 函數設置Cookie Setcookie("標識鍵值","Cookie新值","新有效時間","新的有效做用域"); // 賦值設置Cookie $_COOKIE['標識鍵值'] = "Cookie新值";

刪除cookie值:

// 函數設置Cookie Setcookie("標識鍵值","空值",time()-1);

查看Cookie值:

// 查看全部Cookie值 var_dump($_COOKIE); // 查看具體的Cookie值 var_dump($_COOKIE['鍵值']);

舉例:

<?php // 增長 Cookie // 設置Cookie函數法 setCookie(); setCookie("test1","test1"); // 設置Cookie賦值法 $_COOKIE['test2'] = "test2"; // 修改Cookie // 修改Cookie setCookie() setCookie("test1","test1->test3"); // 修改Cookie賦值法 $_COOKIE["test2"] = "test2->test4"; // 查詢全部Cookie值 var_dump($_COOKIE); // 查詢鍵值爲test2的值 var_dump($_COOKIE['test2']); // 刪除鍵值爲test1的值 setCookie("test1","",time()-1); // 設置test2值爲空 $_COOKIE['test2'] = ""; var_dump($_COOKIE);

使用setcookie設置或修改cookie後,第一次刷新頁面打印cookie不會有結果,只會生成cookie文件,第二次刷新時纔有獲取新增或修改的值,使用$_COOKIE新增或修改值,在修改後第一次請求就能夠獲取結果。

使用setcookie刪除cookie值時,第一次刪除只是刪除了文件,刷新頁面後,對應的cookie值已經被刪除。

全部setcookie函數做用第一次不會產生結果,第二次纔會,使用$_COOKIE操做的數據第一次就會了。

SESSION會話控制

session內容通常以文件的形式存儲於服務器中,Cookie存儲的是鍵值爲「PHPSESSID」的Seeion_id值,通常服務器存儲的session文件也會在30分鐘後自動清除。

添加session:

$_SESSION['session鍵值'] = "session值";

修改session:

$_SESSION['session鍵值'] = "session新值";

查看session值:

// 查看所有session var_dump($_SESSION); // 單獨查看鍵值 var_dump($_SESSION['test']);

刪除session:

// 刪除session值,但保留數據類型 $_session['session鍵值'] = array(); // 刪除cookie中的session_id $session_id = session_name(); setCookie($session_id,"",time()-1); // 釋放當前在內存中已經建立的全部$_SESSION變量 session_unset(); // 刪除當前用戶對應的session文件以及釋放session_id session_destroy();

使用舉例:

<?php
    // 開啓session session_start(); // 增長session $_SESSION['test'] = "session內容"; $_SESSION['test1'] = "session內容"; // var_dump($_SESSION['test']); // 修改session $_SESSION['test'] = "session修改內容"; // var_dump($_SESSION['test']); // 查看所有session var_dump($_SESSION); // 單獨查看鍵值爲test的Session值 var_dump($_SESSION['test']); // 刪除session // 刪除session的變量值 // $_SESSION['test'] = array(); // 刪除全部的SESSION通常用於退出操做 // 1使客戶端COOKIE中的SESSIONID過時 // $session_id = Session_name(); // setcookie($session_id,"",time()-1); // 釋放當前在內存中已經建立的全部$_SESSION變量,但不刪除session文件以及不釋放對應的session_id // session_unset(); // 刪除當前用戶對應的session文件以及釋放session_id,但內存中的$_SESSION變量內容依然保留 session_destroy(); var_dump($_SESSION);

cookie和session區別:
存儲位置,數量和大小限制,內容區別,路徑區別
session值沒有大小的限制,但過多,會致使服務器壓力大,內容,cookie保存的是字符串,session保存的數據是對象

image.png

session 實現,存儲

image.png

session_id獲取/設置當前會話 ID

session_id ([ string $id ] ) : string

php中的cookie使用

cookie是保存在客戶端瀏覽器中的,cookie是http頭的一部分,經過瀏覽器請求頁面時,經過http頭的形式發送過去,被請求的頁面時,經過PHP來獲取cookie的值。

設置cookie:

bool setcookie( string name,[string value],[int expire],[string path],[string domain]);

name:爲cookie名
value:爲cookie值
expire:爲過時時間
path爲服務器端有效路徑
domain:爲cookie有效的域名

實例:

setcookie('text','text',time()+3600*12,'/','www.test.com');

獲取cookie:

$cookieValue =''; if (isset($_COOKIE['text'])) //首先判斷是否已設置了該cookie { $cookieValue = $_COOKIE['text']; }

銷燬cookie:

setcookie("user", "", time()-3600);

小結:

image.png

image.png

Session高級應用

session臨時文件,session緩存,session數據庫存儲
臨時文件session_save_path()存儲session臨時文件,能夠緩解臨時文件存儲致使服務器效率下降等問題。

<?php $path="./tmp/"; session_save_path($path); session_start(); $_SESSION[username] = true; ?>

Session緩存
Session緩存的完成使用的是session_cache_limiter()函數

string session_cache_limiter ( [string cache_limiter])

session_cache_expire()函數,緩存時間的設置

int session_cache_expire ( [int new_cache_expire])

實例:

<?php session_cache_limiter('private'); $cache_limit = session_cache_limiter(); // 開啓客戶端緩存 session_cache_expire(30); $cache_expire = session_cache_expire(); // 設置客戶端緩存時間 session_start(); ?>

Session數據庫存儲
PHP中的session_set_save_handler()函數

bool session_set_save_handler ( string open, string close, string read, string write, string destroy, string gc)

image.png

封裝session_open()函數,鏈接數據庫

function _session_open($save_path,$session_name) { global $handle; $handle = mysql_connect('localhost','root','root') or die('數據庫鏈接失敗'); //鏈接MySQL數據庫 mysql_select_db('db_database11',$handle) or die('數據庫中沒有此庫名'); //找到數據庫 return(true); }

封裝session_close()函數,關閉數據庫鏈接

function _session_close() { global $handle; mysql_close($handle); return(true); } 

封裝session_read()函數

function _session_read($key) { global $handle; //全局變量$handle鏈接數據庫 $time = time(); //設定當前時間 $sql = "select session_data from tb_session where session_key = '$key' and session_time > $time"; $result = mysql_query($sql,$handle); $row = mysql_fetch_array($result); if ($row){ return($row['session_data']); //返回Session名稱及內容 }else{ return(false); } }

封裝session_write()函數

function _session_write($key,$data) { global $handle; $time = 60*60; //設置失效時間 $lapse_time = time() + $time; //獲得UNIX時間戳 $sql = "select session_data from tb_session where session_key = '$key' and session_time > $lapse_time"; $result = mysql_query($sql,$handle); if (mysql_num_rows($result) == 0 ) { //沒有結果 $sql = "insert into tb_session values('$key','$data',$lapse_time)";//插入數據庫sql語句 $result = mysql_query($sql,$handle); }else{ $sql = "update tb_session set session_key = '$key',session_data = '$data',session_time = $lapse_time where session_key = '$key'"; //修改數據庫sql語句 $result = mysql_query($sql,$handle); } return($result); } 

封裝session_destroy()函數

function _session_destroy($key) { global $handle; $sql = "delete from tb_session where session_key = '$key'"; //刪除數據庫sql語句 $result = mysql_query($sql,$handle); return($result); }

封裝session_gc()函數

function _session_gc($expiry_time) { global $handle; $lapse_time = time(); //將參數$expiry_time賦值爲當前時間戳 $sql = "delete from tb_session where expiry_time < $lapse_time"; //刪除數據庫sql語句 $result = mysql_query($sql,$handle); return($result); }
相關文章
相關標籤/搜索