說起會話,我們經常登入到linux系統,執行各種各樣的程式,這都牽涉到會話。但是,一般情況下我們又很少會去關注到會話的存在,很少會去了解它的來龍去脈。
維繫乙個會話,最常見的有兩種方式:
一是基於某種憑證,比如web**的登入會話,在登入驗證之後,伺服器就會返回乙個session id作為憑證。使用者之後的請求總是會帶上這個id,而伺服器通過這個id也就能知道使用者是誰。直到使用者登出登入、或者登入超時,伺服器會清洗掉對應的session id,這個id就失效了,會話也就隨之而結束。
第二種方式是基於連線的,當使用者和系統之間的連線啟用時,系統會對使用者進行驗證,驗證通過之後,來自這個連線的操作都是屬於這個使用者的。直到連線斷開,則會話結束。
linux系統的會話就是以第二種方式來維繫的。會話基於連線,那麼連線的安全性就決定了會話的安全性。以最常見的兩種連線為例:
1、本地連線,使用者是直接通過鍵盤顯示器來跟系統互動的,鍵盤顯示器直接連線在主機上,連線被篡改基本上是不可能的;
2、遠端連線,以ssh為例,其協議會進行加密,從而避免連線被篡改;
呼叫以下函式可以使程序成為會話組長:
pid_t setsid(void)
要注意的是:
1.呼叫程序不能是程序組組長,該程序變成新會話首程序(session header)
2.該程序成為乙個新程序組的組長程序。
3.需有root許可權(ubuntu不需要)
4.新會話丟棄原有的控制終端,該會話沒有控制終端
5.該呼叫程序是組長程序,則出錯返回
6.建立新會話時,先呼叫fork, 父程序終止,子程序呼叫
#include
#include
#include
int main(void)
else
if (pid == 0)
return0;}
輸出結果:
child process pid is 3978
group id of child is 3977
session id of child is 3305
changed:
child process pid is 3978
group id of child is 3978
session id of child is 3978
通過以下函式檢視會話程序id
pid_t getsid(pid_t pid)
pid為0表示察看當前程序session id
注:組長程序不能成為新會話首程序,新會話首程序必定會成為組長程序。
演算法(三十八)
1 使用者模型檔案去重。抖音上不同的使用者型別我們有不同的使用者模型檔案。我們有乙個模型配置檔案,裡面有很多的不同使用者型別和他們對應的模型檔案。我們需要找出每個模型檔案對應的是哪些使用者型別。給定一行輸入,格式為 a ba表示這個使用者的使用者型別,b表示這個使用者對應的模型檔案。請你輸出每個模型...
多表刪除(三十八)
多表刪除的語法結構 delete tbl name tbl name from table references where where condition 我們還以商品表為例,我們再來檢視一下表裡的記錄,我們輸入select from tdb goods g 那麼我現在要刪除掉重複的記錄並保留id...
三十八 矩形面積交
問題 矩形面積交 題目描述 平面上有兩個矩形,它們的邊平行於直角座標系的x軸或y軸。對於每個矩形,我們給出它的一對相對頂點的座標,請你程式設計算出兩個矩形的交的面積。輸入 輸入僅包含兩行,每行描述乙個矩形。在每行中,給出矩形的一對相對頂點的座標,每個點的座標都用兩個絕對值不超過10 7的實數表示。輸...