
高级-应用程序域
1、什么是应用程序域?它是DotNet平台下的一个概念,只有DotNet平台才会有。
1)操作系统中,进程和进程之间是隔离的。这个是由操作系统自动做好的。进程内部的内存不可能被其它的进程所访问到。如果能被其他的进程访问到,那么肯定是内存溢出了。通过一些黑客技术,非法的技术访问到了一个进程内部的内存。正常的情况下是:进程与进程之间是相互隔离的。
2)进程内的资源只能进程自己访问。
3)进程内的线程之间可以相互的访问。为什么呢?很简单的一个道理,咱们之前启动一个线程,就相当于线程之间相互操作了,eg:主线程与子线程。线程还有一个Abort()方法,可以直接释放掉。这就涉及到线程之间可以相互访问 和 相互操作。
4)那么微软就想办法,我能不能进程内 相互隔离成几个模块。进程内再分几个模块出来。每个模块之间不能相互访问。这样的话,我进程内就可以做到一些隔离啦。【重点,新点,核心】
(1)进程内部,将线程与线程之间的操作隔离的模块,被称为应用程序域。
(2)应用程序域的作用:就是来隔离进程内部不同模块的。
(3)应用程序域之间是相互隔离的。这个就相当于进程内部的子进程。应用程序域之间也是不能访问的。
(4)每个应用程序域都有独立的内存地址、独立的安全处理、独立的堆栈。
(5)这个是进程内部独立模块新的概念。
(6)应用程序域之间 如何通信?当然仍然可以使用 Socket,但是微软加了一个更高级的 DotNet Remoting 。但是这个 DotNet Remoting现在也不再用了,它被WCF所包括进去了,所以这个也不再用了。直接用WCF就行了,WCF就包含了这块内容。对于没有使用WCF的,这个仍然是要会的。当然 WCF底层还是走Socket。【新点,核心,重点,难点】
(7)WCF是一个更高级的通信技术框架。
5)进程 与 进程 之间不能相互访问,那么进程之间 是如何相互通信的呢?走Socket 通信访问。【重点,新点,核心】
2、Session的一个Bug:
1)比如登录模块,我们有验证码的验证。只有当页面刷新或者手动刷新验证码的情况下,后台Session中保存的验证码才会刷新。
2)接下来,我们通过程序模拟Post提交,我们没有再去请求你的验证码生成程序,没有请求,则验证码一直存到在Session中,这就破解掉了。有验证码也没用。【这就是一个Bug,好多网站都有这个Bug】
3)就算我们Post模拟请求的验证码错误,返回重新登录的页面,页面中带有重新请求生成验证码请求。但是我们通过程序来处理的,接收到是字符串,我们不去解析响应内容,就不会去再次请求验证码的生成,则后台Session中的值就不会更新。
4)所以,我们针对会话中的验证码需要做一个简单的处理。验证码只能用一次,用完以后,立马清空。对验证码校验的时候,判断为空或者不正确都视为验证失败。这个问题就解决了。【重点】
eg:Session["VCode"] = null; 或 Session.Remove("VCode");





