資源描述:
《在cgi中實(shí)現(xiàn)session的想法和實(shí)現(xiàn)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。
1、在CGI中實(shí)現(xiàn)session的想法和實(shí)現(xiàn)>>教育資源庫對(duì)于客戶端的每一次登陸,在服務(wù)器生成一個(gè)session,作為一個(gè)文件存儲(chǔ)在服務(wù)器上,例如在“/tmp”下。文件命名為sess_開頭,在加上一個(gè)隨機(jī)的字符串,這個(gè)字符串稱之為session_id。在文件中存儲(chǔ)的內(nèi)容包括:1、用戶的最后一次活動(dòng)時(shí)間。(用來檢查用戶是否長時(shí)間沒有操作,視為已經(jīng)退出登陸)。2、一個(gè)隨機(jī)的字符串。(用來驗(yàn)證客戶端的身份,這個(gè)字符串同時(shí)作為cookie發(fā)往客戶端)。3、客戶端的IP.4、實(shí)際要存儲(chǔ)的數(shù)據(jù)。例如用戶的ID,密碼等。在用戶登陸時(shí),生成這個(gè)文件,并且,將那個(gè)隨機(jī)字符串發(fā)到客戶端的cookie.在以后的每個(gè)
2、頁面的超連接,或是FORM中的要跟入session_id.每個(gè)頁面開始,要:1、檢查是否超時(shí)。2、對(duì)比cookie中的字符串和session文件中的,驗(yàn)證客戶身份。3、對(duì)比客戶端IP和session文件中的IP,驗(yàn)證客戶身份。4、讀出數(shù)據(jù),供下面程序使用5、刷新最后活動(dòng)時(shí)間6、生成新的隨機(jī)字符串,刷新session中對(duì)應(yīng)部分,并將其作為cookie發(fā)往客戶端。因?yàn)槲艺谧龅捻?xiàng)目要求比較高的安全性,所以我在這方面考慮的比較多些,但我知道這樣肯定還不是完全安全的。如果誰發(fā)現(xiàn)了什么漏洞,麻煩告訴我。下面是我的部分實(shí)現(xiàn)代碼:set_session()在登陸是調(diào)用。start_session()在每
3、個(gè)頁面的前面調(diào)用。kill_session()在退出登陸是調(diào)用。clean_session()用來刪除過期的session文件。#include<stdio.h>#include<stdlib.h>#include<time.h>#include<unistd.h>#include<sys/types.h>#include<sys/stat.h>#include<ftl.h>#include<dirent.h>#defineREMOTE_ADDR1getenv("REMOTE_ADDR")#de
4、fineHTTP_COOKIEgetenv("HTTP_COOKIE")char*sess_user_name;char*sess_user_pe,char*pe_tnop,r;time(noeoutsessionfile*/clean_session_file();/***getstr_nohash_key*/srand(noorerandomsession_id;*/temp=rand();srand(temp);&nb12345下一頁>>>>這篇文章來自..,。sp;r=rand();session_id=(char*)malloc(17*sizeof(char));for(i=0;
5、i<16;i++){srand(r);r=rand();session_id[i]=r%26+’A’;}session_id[16]=’