這篇文章主要介紹了關於PHP面試題的小結,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下
csrf是什麼:
CSRF跨網站請求偽造,
1. 使用者C開啟瀏覽器,造訪受信任網站A,輸入使用者名稱和密碼請求登入網站A;
2. 在使用者資訊通過驗證後,網站A產生Cookie訊息並傳回瀏覽器,此時使用者登入網站A成功,可以正常傳送請求到網站A;
3. 使用者未登出網站A之前,在同一瀏覽器中,打開一個TAB頁訪問網站B;
4. 網站B接收到用戶請求後,返回一些攻擊性代碼,並發出一個請求要求訪問第三方站點A ;
5. 瀏覽器接收到這些攻擊性代碼後,根據網站B的請求,在使用者不知情的情況下攜帶Cookie訊息,向網站A發出請求。網站A並不知道該請求其實是由B發起的
,所以會根據用戶C的Cookie資訊以C的權限處理該請求,導致來自網站B的惡意程式碼被執行
session與cookie區別:
1.COOKIE 存在於客戶端。 SESSION 存在於服務端。
2.COOKIE 預設儲存大小為 4kb. 一般設定COOKIE 不會超過 20個,具體看需求。
3.SESSION 預設以檔案方式儲存。存活時間預設為 24分鐘,初始儲存大小為1M,可修改理論上無限制。可透過修改 php.ini 進行配置。
4.SESSION 預設是基於COOKIE SESSION開啟時會產生session_id 存在COOKIE中。
5.SESSION COOKIE 都是會話控制。因為咱們得http 是無狀態無連線得。所以需要透過會話控制來識別使用者。
php 超全域變數:
$GLOBALS $_SERVER $_REQUEST $_POST _COOKIE $_SESSION
PHP
與MYSQL事務處理:##1、用begin,rollback,commit來實現##begin開始一個交易
rollback 交易回溯commit 交易確認#2、直接用set來改變mysql的自動提交模 事務的4大功能(ACID):
事務是資料庫的邏輯工作單位,它對資料庫的修改要麼全部執行,要麼全部不執行。
一致性(Consistemcy): 事務前後,資料庫的狀態都符合所有的完整性限制。 隔離性(Isolation): 並發執行的交易是隔離的,且一個不會影響一個。如果有兩個事務,運行在相同的時間內,執行相同的功能,事務的隔離性將確保每一事務在系統中認為只有該事務在使用系統。這種屬性有時稱為串列化,為了防止交易操作間的混淆,必須串行化或序列化請求,使得在同一時間僅有一個請求用於同一資料。 透過設定資料庫的隔離級別,可以達到不同的隔離效果。 持久性(Durability): 在事務完成以後,該事務所對資料庫所做的更改便持久的保存在資料庫之中,並不會被回滾。xss
怎麼防止:
XSS又稱為CSS,全名為CrossSiteScript,跨站腳本攻擊防止: script注入,轉義過濾script標籤。
union
和unionall
的差別:union重,unionall不去重新#
#RBAC
角色為基礎的權限控制:
## 角色的權限控制:## 角色表、角色與功能表
redis持久化:記憶體快照(RDB) RDB 持久化可以在指定的時間間隔內產生資料集的時間點快照 日誌(AOF) AOF 持久化記錄伺服器執行的所有寫入作業命令,並在伺服器啟動時,透過重新執行這些命令來還原資料集。
分錶:減少資料庫的負擔,並縮短查詢時間。 垂直分錶:垂直分割就是依字段分.
水平分錶:以一列或多列資料的數值將資料行放到兩個獨立的表中。
水平分錶怎麼保證插入的id的唯一?
可以新建一個id服務,並將使用者的id放在資料庫或redis中。
jquery選擇器:
## 1.元素 2.屬性 3.id 4.類別 5.全域。行內元素與區塊內元素
行內:,,,
,
轉換:display:#line,block,in#line-block.#nlock.
##132
#Slock.#區別:塊、
①總是在新行開始,佔據一整行;
②高度,行高以及外邊距和內邊邊邊邊距距離都可控制;
③寬頻永遠與瀏覽器寬度一樣,與內容無關;
④它可容納內嵌元素和其他區塊元素。
行、
①及其他元素皆在一行上;
②高,以高及外邊界與內邊界部分可變更;
##。 # ③寬度只與內容有關;
④行內元素僅可容納文字或其他行內元素。
分組查詢:orderby
表中統計男女數量20-30: select count(sex) from表where age between 20 and 30 group bysex
ORM:物件關係對應(Object Relational Mapping,簡稱ORM)模式是一種為了解決物件導向與關聯式資料庫存在的互不符的現象的技術
Linux檢視連接埠:刷選檔案:檢視程序:# netstat-antu //查看目前所有tcp連接埠·
netstat-ntulp |grep80 //檢視所有80埠使用狀況·
rep 情況·Linux
查看執行多少指令:history檔案操作函數: open開啟檔案
fstat 取得檔案
### file 寫入檔案(可安全用於二進位檔案)###### file_get_contents()將整個檔案讀入一個字串##########開啟檔案的幾種方式:######### Fopen(),######### ()###### 讀取與寫入,追加#########php######刪除資料夾指令######### Unlink();######## Unlink();###### ####中文字串截取:###mb_substr###### mb_substr($str,$start, $length, $encoding )###### $str,需要被截斷的字串字串### ### $start,截斷開始處,起始處為0####### $length,要截取的字數###### $encoding,為網頁編碼,如###### $encoding,則編碼網頁,如###### $encoding,則編碼網頁,如###### $enutf-23112,KGB# #######D######與M###的區別:###### M實例化基底類,D可以實例化自訂類別##########table ######隔行變色:######### 透過JQ辨識table tr td的雙數單數,對應單數雙數給予賦予不同CSS樣式,透過不同背景,即可實現隔行換色變色效果。 ###當滑鼠經過時候JQ呼叫另外設定的trtd背景,實作滑鼠經過背景顏色也會跟著變化
ajax同步非同步:
# # 同步等待服務端的回傳結果然後進行其他操作 非同步傳送請求後不等待服務端的回傳結果直接進行其他操作 Linux檢視所有檔案:ls設定一個p在另一個p上:
z-index數值越大越往上
ob函數:ob_start(); //以輸出緩衝區,所有的輸出資料不再直接被傳送至涉獵器,而是保存在輸出緩衝區裡面。 ob_clean(); //移除以內部緩衝區的內容,且未關閉緩衝區(未輸出)。
ob_end_clean(); //刪除內部緩衝區的內容,並關閉緩衝區(未輸出)。
ob_get_clean(); //返回內部緩衝區的內容,並關閉緩衝區。相當於履行 ob_get_contents() and ob_end_clean()
## ob_flush(); //傳送內部緩衝區的內容物至涉獵器,刪除緩衝區的內容,且未關閉/傳送內部緩衝區。 ob_end_flush(); //將內部緩衝區的內容傳送至涉獵器,移除緩衝區的內容,並關閉緩衝區。 ob_get_flush(); //返回內部緩衝區的內容,並關閉緩衝區,以釋放緩衝區的內容。相當於ob_end_flush()並傳回緩衝區內容。 flush(); //將ob_flush釋放所產生的內容,且不在PHP緩衝區中的內容,整個輸出至涉獵器;內部緩衝區的內容,並且已輸出至在PHP緩衝區中的內容,整個輸出至涉獵器;內部緩衝區的內容,並輸出。 ob_get_contents(); //返回緩衝區的內容,且不輸出。 ob_get_length(); //返回內部緩衝區的長度,則為緩衝區未已啟動,則此函數傳回FALSE。 ob_get_level(); //Return the nestinglevel of theoutput buffering mechanism. 3.購物車怎麼做的?流程。 。一、將商品加入購物車
1.先在頁面上新增一個連結 # 1.先取得商品加一個連結 # 1.先取得商品id
## 2.從資料庫中透過id將商品查詢出來。 3.將商品加入購物車,沒有的話,重新new 出一個 是否存在,如果不存在,數量為1,如果存在,數量在原始基礎上加1 c.將購物車重新裝入session。 問題:我們的購物使用的是一個HashMap集合,key是唯一的,保證key唯一的方式是透過hashCode與equals方法所以我們在使用時,需要將Product類別的hashCode與equals方法重寫,我們在重寫時,只比較id值就可以。二、顯示購物車商品
我們的購物車是存在於session中的。我們只需要在cart.jsp頁面將session中的cartt這個Map集合得到,並顯示出來就可以。 1.在購物車中商品操作 2.點選 或-號時可以修改購物車中商品的數量3.點選 或-按鈕時,我們會呼叫一個javascript中的函數。 changeCount();透過這個函數我們向伺服器發送請求,在伺服器端從session中獲取購物車中數據,並根據提交的數據將購物車中指定的商品數量修改在返回到購物車頁面展示。
最近一個月的銷售量怎麼取?三個月?一年呢?
# 查詢資料庫某個欄位
#怎麼在30萬條資料3秒內取出?建立什麼索引?
普通指標
索引類型:
普通索引、唯一指標、主鍵索引、組合指標
##
## ## ## ## ##
####
##redis與memecache的差別在於:
1.儲存方式:
memecache使用資料存在記憶體之中,並在斷電後斷電後會掛掉,資料不能超過記憶體大小。 redis有部份存在硬碟上,這樣能確保資料的持久性。
2、資料支援型別:
redis在資料支援上比memecache較多的數量。
3.使用底層模型不同:
新版本的redis直接自己建構了VM 機制 ,因為一般的系統呼叫系統函數的話,會浪費一定的時間去移動和請求。
redis 官方中目前只支持LINUX 上去行,從而省去了對於其它系統的支持,這樣的話可以更好的把精力用於本系統環境上的優化,雖然後來微軟有一個小組為其寫了補丁。但沒有放到主幹上
SKU#怎麼做:屬性規格。 其實sku是商品單數庫存量單位 包含商品表商品屬性表貨品表
#tp#的設定檔:
##tp #common/config.phpphp
的資料型態:
四種標量型態: boolean(布林型) integer (整數) float (浮點型, 也稱為double)## # :
array(陣列)
object(物件)
## (資源)NULL (NULL)
單例模式:
單例模式的主要特點是「三私一公」: 唯一的實例的私有靜態成員變數 建構子必須宣告為私有的,並且防止外部程式new一個物件而失去單一範例的意義 複製函數必須宣告為私有的,並防止物件被複製必須提供一個存取這個實例的公共靜態方法(通常命名為getInstance),從而傳回唯一實例的一個引用。
查詢出20-30
之間的男女數://select count(sex) from 表where age between 20 and 30group by sexSelect count(*) from 表名where age between 20 and 30 group by age. Group by#PHP
中有三種存取修飾符,分別為:
PHP中有三種存取修飾符,分別是:PHP
中有三種存取修飾符,分別是:
public(公開的、預設) protected(受保護的)######private(私有的)#########存取權修飾符的範圍:#########當類別的成員被宣告為public的存取修飾符時,該成員能被外部程式碼存取和操作。 ######private(私有的)######被定義為private的成員,對於類別內部所有成員都可見,沒有存取限制。對類別外部不允許存取。 ###protected(受保護的)
protected稍微有點複雜,被宣告為protected的成員,只允許該類別的子類別進行存取。
mysql int儲存:
bigint 儲存大小為 8 個位元組。
int儲存大小為 4 個位元組。
smallint儲存大小為 2 個位元組。
tinyint 從 0 到 255 的整數資料。儲存大小為1 位元組。
cookie的作用域:
domain本身。 domain底下的所有網域。
就是設定一個權限給cookie。當domain設定為空時,domain預設為目前域名,並且該域名下的子域名都可以接收到cookie。
但是domain參數設定其 子網域時,所有網域都接收不到了,包括那個子網域。
linux檢視日誌檔案內容指令
tail、cat、tac、head、echo
tail-f test. log
top檢視記憶體
df-lh檢視磁碟
ps-a16行程
ps-a
#就就就是所有程式
#。
變數使用$:定義並使用常數的時候則不需要使用$ 符號。
常數的值必須是定值,且不能是變量,類別屬性,數學運算的結果或函數呼叫。 介面(interface)中也可定義常數。 抽象類別不能被實例化。抽象類別中可以有靜態方法。抽象類別中可以沒有抽象方法。 普通方法,存放類別內,只有一份靜態方法,也是存放於類別內,只有一份
差別在於:
普通方法需要對象去調用,需要綁定$this 即,普通方法,必須要有對象,然後讓對象來調用 而靜態方法,因此不屬於哪一個對象,因此不屬於哪一個對象,因此不屬於哪一個對象,因此不屬於哪一個對象需要綁定$this 即,不需要物件也可以呼叫靜態成員:不需要實例化就能訪問,類別的靜態成員變數只屬於這個類別類別成員:一種是在類別中定義,一種是在建構函數中定義。方法和函數的差異:
函數是單獨存在的,方法是依賴類別存在的,只能透過物件呼叫。 類別檔案是否可以定義函數: 不行值傳遞與值參考:
(1)按值傳遞:函數範圍內對值的任何改變在函數外部都會被忽略(2)按引用傳遞:函數範圍內對值的任何改變在函數外部也能反映出這些修改
(3)優缺點: A:以值傳送時,php必須複製數值。特別是對於大型的字串和物件來說,這將會是一個代價很大的操作。B.依引用傳遞則不需要複製值,對於效能提升很有好處。
防止訂單重複提交:
1.使用JS讓按鈕在點擊一次後停用(disable)。採用此方法可以防止多次點擊的發生###### 2.設定session值.提交一次後,刪除,如果沒有session值,不讓提交.###### 3cookie一樣#### #####字串函數:######### strlen();strpos();echo();implode();trim();等、、、######### #字串反轉函數:######### strrev, mb_string;#########http1.0######與http1.1###的差異:## #### HTTP1.0規定瀏覽器與伺服器只保持短暫的連接,瀏覽器的每次請求都需要與伺服器建立一個TCP連接,伺服器完成請求處理後立即斷開TCP連接,######伺服器不追蹤每個客戶也不記錄過去的請求。 ###HTTP1.1支持持久连接,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟。
HTTP1.1还允许客户端不用等待上一次请求结果返回,就可以发出下一次请求,但服务器端必须按照接收到客户端请求的先后顺序依次回送响应结果,
以保证客户端能够区分出每次请求的响应内容,这样也显著地减少了整个下载过程所需要的时间
HTTP1.0不支持Host请求头字段。
H TTP1.1中增加Host请求头字段。
全局变量跟局部变量的区别:
1.作用域不同:全局变量的作用域为整个程序,而局部变量的作用域为当前函数或循环等
2.内存存储方式不同:全局变量存储在全局数据区中,局部变量存储在栈区
3.生命期不同:全局变量的生命期和主程序一样,随程序的销毁而销毁,局部变量在函数内部或循环内部,随函数的退出或循环退出就不存在了
4.使用方式不同:全局变量在声明后程序的各个部分都可以用到,但是局部变量只能在局部使用。函数内部会优先使用局部变量再使用全局变量
需要注意一点的是,局部变量不能赋值为同名全局变量的值。
前端的优化:
第一:面向内容的优化
1.减少 HTTP 请求
2.减少 DNS 查找
3.避免重定向
4.使用 Ajax 缓存
5.延迟载入组件
6.预先载入组件
7.减少 DOM 元素数量
8.切分组件到多个域
9.最小化 iframe 的数量
10. 不要出现http 404 错误
第二:面向 Server
1.缩小 Cookie
2.针对 Web 组件使用域名无关性的
什么是缓存雪崩?
当缓存服务器重启或者大量缓存集中在某一个时间段失效,这样在失效的时候,也会给后端系统(比如DB)带来很大压力。
如何避免?
1:在缓存失效后,通过加锁或者队列来控制读数据库写缓存的线程数量。比如对某个key只允许一个线程查询数据和写缓存,其他线程等待。
2:不同的key,设置不同的过期时间,让缓存失效的时间点尽量均匀。
3:做二级缓存,A1为原始缓存,A2为拷贝缓存,A1失效时,可以访问A2,A1缓存失效时间设置为短期,A2设置为长期(此点为补充)
tp路由模式:
1.普通模式 2. 重写模式 3.兼容模式
niginx端口号怎么配置:
在那个nginx.conf中配置两个serve,分别为不同的端口号。
jq获取table标签的第二行:
$(tr:eq(1))
可变变量是什么:
可变变量允许我们动态地改变一个变量的名称。是用一个变量的值作为另一个变量的名称。
查看端口有没有被占用: 修改权限 修改所有者 修改用户组
netstat –apn chmod chown chgrp
查看进程
Top pa aux|grep
#所有人新增執行權限:
#所有人新增執行權限:##Mysql
主從複製: 從函式庫產生兩個線程,一個I/O線程,一個SQL執行緒;
i/ o線程去請求主庫的binlog,並將得到的binlog日誌寫到relay log(中繼日誌) 文件中;
主庫會產生一個log dump 線程,用來給從庫i/o線程傳binlog;
SQL線程,會讀取relay log檔案中的日誌,並解析成特定操作,以實現主從的操作一致,而最終資料一致;
主從複製所需要的指令:
## showmaster status;
startsalve; GRANTREPLICATIONSLAVE,RELOAD,SUPER ON *.* TOmysql_backup@'%'## TOmysql_backup@'%'
#### CHANGEMASTER TOmaster_host = '127.0.0.1',
master_user='mysql_backup',## log_file='mysql-bin .000001',master_log_pos = 3696;
解決主鍵衝突問題
建立一個總表,id從總表裡面分發。
#主機複製:
1.分別在兩台機器授權帳號: grant replication slave, file, select on *.* to'repl'@'10.17.%'identified by 'xxxx'
2.設定檔/etc/my.cnf,使用主函式庫設定檔的基礎上,加入以下組態項目
#nginx
反向代理程式:(1 )rr輪詢(預設)
依照請求順序分配到每個RS,和lvs中的rr演算法一樣,如果RS宕機,會自動剔除,預設只偵測80端口,如果RS報402、403、503、504錯誤,會直接回傳給客戶端。
(2)weight(權重)
在rr的基礎上加上權重(預設為rr weight),權重輪詢和存取成正比,值越大分配的越多,可以根據伺服器的設定設定權重,可以解決伺服器效能不均進行請求分配的問題(3)ip_hash 解決動態網頁session共享問題
每個每個每個每個存取請求依照IP位址的hash值分配,ip的hash值只要相同就會被分配到同一台伺服器上(lvs負載平衡的-p參數,keepalived配置裡的persistence_timeout50),該調度演算法可以解決動態網頁session共享問題,但有時會導致請求分配不均,
提示:由於國內用的都是nat模式,所以hash不適合使用
ip_hash無法和其他的一塊使用,即不能使weight或backup
(4)fair(第三方)
依照後端伺服器的回應時間來配置,回應時間短的優先分配,比上面的都更智能,此種演算法可以依照頁面大小和載入時間長短智慧的進行負載平衡,nginx本身不支援fair,需要下載nginx的upstrea_fair模組
(5)url_hash(第三方)
# 主要應用於快取伺服器上
依照存取的url來分配請求,讓相同的url定向到同一個伺服器,後端伺服器為快取伺服器的時候效果更顯著,在upstream中加入hash語句,server語句中不能寫入weight等其他的參數,hash_method是使用的hash演算法。
缺點:如果有機器宕機了,那就苦了,consistent_hash可以解決這個問題
可以提高後端快取伺服器的效率,nginx本身不支援url_hash的,需要下載hash軟體
(6)least_conn
最少連線數,哪個連線少就分配到哪台裝置
(7)consistent_hash
一致性演算法
#
3、負載平衡:
負載平衡部署方式: 路由模式(建議)# 路由模式(建議) 橋接模式 服務直接返回模式# 輪伺服器,從1至N然後重新開始。此種均衡演算法適合於伺服器群組中的所有伺服器都有相同的軟硬體配置並且平均服務請求相對均衡的情況。
權重輪循均衡:根據伺服器的不同處理能力,給每個伺服器分配不同的權值,使其能夠接受對應權值數的服務請求。例如:伺服器A的權值設計成1,B的權值是3,C的權 值是6,則伺服器A、B、C將分別接受到10%、30%、60%的服務請求。此種均衡演算法能確保高效能的伺服器得到更多的使用率,避免低效能的伺服器負載過重。
隨機平衡:將來自網路的請求隨機分配給內部中的多個伺服器。
權重隨機平衡:此種均衡演算法類似權重輪循演算法,不過在處理請求分擔時是個隨機選擇的過程
#4、負載平衡與反向代理的差異# 反向代理程式是指實現負載平衡的方法。
先談反向代理。使用者在請求時,先把請求發送給代理的伺服器,然後由代理伺服器根據演算法去請求真實的伺服器,最後再回傳給使用者。這種做法,其 一是提高了安全性;
其二是透過多台的real server分擔了使用者的請求,實現了負載平衡。
再談負載平衡。負載平衡的出現,是透過橫向的擴展,盡可能降低單一伺服器的壓力。常見WEB層面的負載平衡的方案有硬體F5、Nginx代理、LVS、各個雲端商的負載平衡服務(如AWS的ELB服務)等。負載平衡後面連的一般是實際提供服務的伺服器,如透過ELB服務,可以做到流量的平均分擔,從而減少單機伺服器的壓力。
由於增加了負載平衡這層,單純使用某一方案還是要考慮單點的問題。負責由於負載平衡這個伺服器未能承受壓力,宕機了,服務也是不可用的。所以Nginx、LVS盡量設定多台代理,可以故障轉移和故障警報,以便及時去處理代理層伺服器的問題。 ELB是亞馬遜提供的服務,它本身的實現底層就有數百甚至上千的機器,所以把它想像成一個代理集群就好。
#
怎麼實作session分享: 我們應該先明確,為什麼要實現共享,假設你的站點是存放在一個機器上,那麼是不存在這個問題的,由於會話資料就在這台機器,可是假設你使用了負載平衡把請求分發到不同的機器呢?這時候會話id在client是沒有問題的,可是假設用戶的兩次請求到了兩台不同的機器,而它的session數據可能存在當中一台機器,這個時候就會出現取不到session數據的情況,於是session的共享就成了一個問題
1.基於NFS的Session共享
2.基於資料庫的Session共享
## ## 4.基於快取(Memcache)的Session共享
5.session複製
#
變數的作用域:作用域的作用域:
全域變量,局部變量。
建立壓縮檔:zip、gzip、bzip2、tar Zcvf;
##varchar20
能存多少個漢字?
必須先確定mysql版本
4.0版本以下,varchar(20),指的是20字節,如果存放UTF8漢字時,只能存16個(每個漢字3字節)
5.0版本以上,varchar( 20),指的是20字符,無論存放的是數字、字母還是UTF8漢字(每個漢字3字節),都可以存放20個
其實最好的方法是在自己資料庫中建個表試試可以放多少漢字,現在mysql都5.0已上了,varchar(20)是可以存20個漢字的
做登入的時候用戶名和密碼怎麼儲存的:
一般我們用cookie將使用者資訊會儲存在客戶端,例如實現一個七天免登陸等。
我們在登入的時候先設定cookie的參數,將使用者名稱和密碼都儲存起來,下次當跳到下一個頁面的時候,
我們可以先判斷有沒有cookie的值,如果有就直接跳到下一個頁面,如果沒有那麼就要提示請登入。
實現cookie的儲存後,使用者就能不使用輸入密碼就可以登入成功了!
#檢視防火牆的指令(Centos7.0之前):
檢視防火牆狀態: service iptables status
開啟防火牆:service iptables start
關閉防火牆:service iptables stop
oo#簇索引與非聚集索引:
1、叢集索引 a)一個索引項目直接對應實際資料記錄的儲存頁,可謂「直達」 b)主鍵缺省使用它 c)索引項目的排序和資料行的儲存排序完全一致,利用這一點,想修改資料的儲存順序,可以透過改變主鍵的方法(撤銷原有主鍵,另找也能滿足主鍵要求的一個字段或一組字段,重建主鍵) d)一個表格只能有一個聚簇索引(理由:資料一旦存儲,順序只能有一種)2、非聚集索引
a)不能「直達」,且可能連鎖地存取多級頁表後,才能定位到資料頁 b)一個表格可以有多個非聚集索引
#單登入:
一.登陸原則說明 單一登入的技術實現機制:當使用者第一次造訪應用系統1的時候,因為尚未登入,會被引導到認證系統中進行登入;根據使用者提供的登入信息,認證系統進行身份效驗,如果通過效驗,應該返回給使用者一個認證的憑證--ticket;使用者再訪問別的應用程式的時候,就會將這個ticket帶上,作為自己認證的憑證,應用系統接受到請求之後會把ticket送到認證系統進行效驗,檢查ticket的合法性。如果透過效驗,使用者就可以在不用再登入的情況下存取應用系統2和應用系統3了。 可以看出,要實現SSO,需要以下主要的功能: a)所有應用系統共享一個認證系統; b)所有應用系統能夠識別和提取ticket資訊; c)應用系統能夠辨識已登入的用戶,且能自動判斷目前使用者是否已登入過,以完成單一登入的功能#基於上述基本原則,本人以php語言設計了一套單一登入系統的程序,目前已投入正式生成伺服器運作。本系統程序,將ticket資訊以全系統唯一的 session id作為媒介,從而取得目前線上使用者的全站資訊(登陸狀態資訊及其他所需要處理的使用者全站資訊)。
登陸流程:
## 1.第一次登陸某個站:
a)使用者輸入使用者名稱密碼,向使用者驗證中心發送登入請求
### b)目前登入站點,透過webservice請求,使用者驗證中心驗證使用者名,密碼的合法性。如果驗證通過,則產生ticket,用於標識目前會話的用戶,並將目前登陸子站的網站識別碼記錄到用戶中心,最後###c)將取得的使用者資料和ticket交回至子站。如果驗證不通過,則傳回對應的錯誤狀態碼。
d)根據上一步的webservice請求返回的結果,當前子站對用戶進行登陸處理:如狀態碼表示成功的話,則當前站點通過本站cookie保存ticket,並本站記錄用戶的登入狀態。狀態碼表示失敗的話,則給使用者對應的登入失敗提示。
2. 登陸狀態下,使用者前往另一子:
a)透過本站cookie或session驗證使用者的登入狀態:如驗證通過,進入正常本站處理程序;否則戶中心驗證使用者的登入狀態(發送ticket到使用者驗證中心),如驗證通過,則對傳回的使用者資訊進行本機的登入處理,否則表示使用者未登入。
登出流程:
a)目前登出站清除使用者本站的登入狀態及本地儲存的使用者全站唯一的隨機id
b)透過webservice接口,清除全站記錄的全站唯一的隨機id。 webservice介面會傳回,登出其他已登入子站的javascript程式碼,本站輸出此程式碼。
c)js程式碼存取對應站W3C標準的登出腳本
類別常數如何定義:
Const
#
什麼是抽象方法:
## 沒有方法的方法為抽象方法、使用關鍵字abstract來修飾.ajax的資料類型,參數:
1 .json 2.jsonp 3.xml 4.html#三級連動:## ##
解決主鍵衝突
設定檔指令
auto_increment_increment=2
5.#為什麼要使用會話控制
# http協定是一個無狀態的協定透過session ID來識別使用者
6.# httpHTTPS ip
7 HTTP
協議是什麼 超文本傳輸協議
8. XML
##與HTML是什麼; XML是可擴充標記語言 HTML HTML HTML為超文本標記語言
9、jsonp
是什麼 進行跨域請求的一種方式利用了