Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在用Delphi编写的ISAPI模块中使用会话_Delphi_Session_Isapi Extension - Fatal编程技术网

如何在用Delphi编写的ISAPI模块中使用会话

如何在用Delphi编写的ISAPI模块中使用会话,delphi,session,isapi-extension,Delphi,Session,Isapi Extension,我正在用Delphi编写一个ISAPI扩展,并寻找克服http无状态问题的方法。我想使用会话来完成这些任务,但找不到从我的ISAPI模块启动会话的方法。由于会话是非常特定于web服务器的,所以我想每个会话都有不同的方式,而且还可以通过特定于服务器的DLL访问这些功能。我目前对Apache感兴趣,但非常感谢提供有关IIS的信息。 我下载了源代码por PHP,并检查了session.c,其中包含PHPAPI void PHP_session_start(void)的代码,尽管没有多少来自它。 如何

我正在用Delphi编写一个ISAPI扩展,并寻找克服http无状态问题的方法。我想使用会话来完成这些任务,但找不到从我的ISAPI模块启动会话的方法。由于会话是非常特定于web服务器的,所以我想每个会话都有不同的方式,而且还可以通过特定于服务器的DLL访问这些功能。我目前对Apache感兴趣,但非常感谢提供有关IIS的信息。
我下载了源代码por PHP,并检查了session.c,其中包含PHPAPI void PHP_session_start(void)的代码,尽管没有多少来自它。

如何从ISAPI Delphi web模块启动会话(并因此使用会话变量)?

我对IIS上的ISAPI模块有一些经验。ISAPI扩展只不过是一个DLL,它实现了与接收请求的web服务器交换数据的协议

当IIS收到对某个URL的请求,并且您已注册ISAPI扩展来处理该URL时,相应的DLL将由所谓的IIS工作进程加载(如果尚未在内存中)。当工作进程将DLL视为非空闲时,DLL将保留在内存中。您无法控制何时卸载DLL,因此请务必在设计解决方案时牢记这一点

以事件的形式抽象出许多ISAPI细节,这些事件在收到请求并传递给它时被触发。但是,目前没有会话基础结构,您必须自己完成

在我看来,最好的方法是使用会话cookies(每个人都这么做)。因此,在登录过程之后,您需要生成一个字符串,该字符串能够将当前用户标识为有效用户。当然,您必须将该字符串加密并转换为Base64,但在初始测试中,您只需使用用户名填充cookie即可

因此,在处理登录后,您应该使用
TWebModule
中的属性()创建一个新的cookie(属性),例如,
MY\u APP\u SESSION
。此cookie将携带您的会话数据,在本例中,仅包含用户名

在此之后,您将开始在从用于执行登录的浏览器发出的任何其他请求(由属性、类表示)中接收该cookie,因此在所有请求中,您必须验证cookie中的会话数据(在中找到),当您检测到过期会话或假会话时,只需拒绝处理该请求

当用户注销时,只需删除cookie即可

我使用来创建会话cookie,其中包含用于标识用户的内容(不是名称,而是某种Id)、会话有效的日期和时间以及一些安全数据(有时是一组声明)。所有这些都必须加密并转换为Base64。请注意,cookie也可以添加一些安全属性,请阅读相关内容。另外,请注意,这里的安全性必须包括HTTPS才能真正可靠。这是使您的web应用程序或多或少安全的关键时刻

因此,在每个请求中,首先要检查请求的URL的安全性。如果确定URL需要会话,请检查会话cookie,还原Base64,描述它并评估cookie内容。如果一切看起来都正常,那么接下来将处理请求。因此,很明显,防止cookie被伪造是避免欺诈的关键

正如您所看到的,这一切都是关于编写好的delphi代码


我希望这有帮助

我对IIS上的ISAPI模块有一些经验。ISAPI扩展只不过是一个DLL,它实现了与接收请求的web服务器交换数据的协议

当IIS收到对某个URL的请求,并且您已注册ISAPI扩展来处理该URL时,相应的DLL将由所谓的IIS工作进程加载(如果尚未在内存中)。当工作进程将DLL视为非空闲时,DLL将保留在内存中。您无法控制何时卸载DLL,因此请务必在设计解决方案时牢记这一点

以事件的形式抽象出许多ISAPI细节,这些事件在收到请求并传递给它时被触发。但是,目前没有会话基础结构,您必须自己完成

在我看来,最好的方法是使用会话cookies(每个人都这么做)。因此,在登录过程之后,您需要生成一个字符串,该字符串能够将当前用户标识为有效用户。当然,您必须将该字符串加密并转换为Base64,但在初始测试中,您只需使用用户名填充cookie即可

因此,在处理登录后,您应该使用
TWebModule
中的属性()创建一个新的cookie(属性),例如,
MY\u APP\u SESSION
。此cookie将携带您的会话数据,在本例中,仅包含用户名

在此之后,您将开始在从用于执行登录的浏览器发出的任何其他请求(由属性、类表示)中接收该cookie,因此在所有请求中,您必须验证cookie中的会话数据(在中找到),当您检测到过期会话或假会话时,只需拒绝处理该请求

当用户注销时,只需删除cookie即可

我使用来创建会话cookie,其中包含用于标识用户的内容(不是名称,而是某种Id)、会话有效的日期和时间以及一些安全数据(有时是一组声明)。所有这些都必须加密并转换为Base64。请注意,cookie也可以添加一些安全属性,请阅读相关内容。另外,请注意,这里的安全性必须包括HTTPS才能真正可靠。这是使您的web应用程序或多或少安全的关键时刻<