>

创建属于其他Session的进程,守护进程之Sessions

- 编辑:澳门新葡亰平台游戏 -

创建属于其他Session的进程,守护进程之Sessions

  修改有System权限的Token的TokenId为其他Session的TokenId就可以在其他Session里面创建有System权限的进程了。

 

新打开tab,比较两个sessionId

图片 1

发现两个tab卡的sessionId也是相同的

  创建其他Session(User)的进程需要拿到对应Session的Token作为CreateProcessAsUser的参数来启动进程。 

process establishes a new session by calling the setsid function.
进程靠调用setsid()创建一个会话。
#include <unistd.h>
pid_t setsid(void);

问:浏览器访问一个站点,产生一个session,接着进行以下操作:
1、在同一个浏览器新打开一个tab卡,访问同一站点,此时几个session
2、将新打开的tab卡拖拽出来,成为两个浏览器的时候,创建了几个session
3、换一个浏览器,访问同一个站点,此时几个session
4、HttpSession、HttpServletRequest.getSession()、HttpServletRequest.getSession(true)、HttpServletRequest.getSession(false)是不是同一个session?

  相关的Blog: 

If the calling process is not a process group leader, this function creates a new session. Three things happen
如果调用进程不是组长进程,函数setsid()会创建一个新的会话。起到三个作用:
  1.The process becomes the session leader of this new session. (A session leader is the process that creates a session.) 
     调用进程成为新会话的the session leader。A session leader 是创建会话的进程。
     The process is the only process in this new session.
     在新的会话中,调用进程是唯一的进程。
  2.The process becomes the process group leader of a new process group. The new process group ID is the process ID of the calling process.
     调用进程成为新进程组的组长进程。新进程组ID就是调用进程的进程ID。
  3.The process has no controlling terminal. (We'll discuss controlling terminals in the next section.)   
     调用进程没有控制终端。
     If the process had a controlling terminal before calling setsid, that association is broken.
     在调用setsid()之前,如果调用进程有控制终端, 那么调用进程会脱离这个控制终端。

先看产生的第一个session

访问本地的tomcat,将第一次的sessionId存如session,可以看到四个sessionId相同。

图片 2

This function returns an error if the caller is already a process group leader. 

题外话

session存在于服务端,由于http是无状态的,服务端无法区别请求由哪个客户端发送,最终还是依赖cookie,每次发送请求携带一个JSESSIONID,即服务端获取的sessionId,唯一标识一个客户端请求。

图片 3

如果调用进程已经是一个组长进程,则函数返回出错。
To ensure this is not the case, the usual practice is to call fork and have the parent terminate and the child continue.
为了避免这种状况发生,通常的做法是调用fork()使父进程终止,子进程继续运行。
We are guaranteed that the child is not a process group leader, because the process group ID of the parent is inherited by the child,
我们保证了子进程不是组长进程,因为父进程的进程组ID没有被子进程继承,
but the child gets a new process ID. Hence, it is impossible for the child's process ID to equal its inherited process group ID.
而子进程得到一个新进程ID。因此,子进程ID等于它继承的进程组ID是不可能的。

换FF再打开

终于和之前的不一样了。

图片 4

Sessions:是单个或多个进程组的一个集合。

总结

1.对于同一个浏览器,在不清除cookie、缓存、关闭浏览器的前提下,如果没到失效时间,session都是同一个
2.拖拽出来之后,session依然是同一个
3.换一个浏览器,session改变
4.HttpSession、HttpServletRequest.getSession()、HttpServletRequest.getSession(true)、HttpServletRequest.getSession(false)获取到的是同一个session

Sessions:A session is a collection of one or more process groups.

拖拽出来之后

发现两个sessionId依然相同

图片 5

本文由操作系统发布,转载请注明来源:创建属于其他Session的进程,守护进程之Sessions