日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

会话session

發布時間:2024/6/21 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 会话session 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

 維系一個會話,最常見的有兩種方式:?
  一是基于某種憑證,比如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 <stdio.h> #include <stdlib.h> #include <unistd.h>int main(void) {pid_t pid;if ((pid = fork())<0) {perror("fork");exit(1);} else if (pid == 0) {printf("child process PID is %d\n", getpid());printf("Group ID of child is %d\n", getpgid(0));printf("Session ID of child is %d\n", getsid(0));sleep(10);setsid(); // 子進程非組長進程,故其成為新會話首進程,且成為組長進程。該進程組id即為會話進程printf("Changed:\n");printf("child process PID is %d\n", getpid());printf("Group ID of child is %d\n", getpgid(0));printf("Session ID of child is %d\n", getsid(0));sleep(20);exit(0);}return 0; }輸出結果: 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

注:組長進程不能成為新會話首進程,新會話首進程必定會成為組長進程。

?

轉載于:https://www.cnblogs.com/13224ACMer/p/6413858.html

總結

以上是生活随笔為你收集整理的会话session的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。