perl 在页面退出时不清除数据

发布于 2024-12-15 12:56:34 字数 1437 浏览 0 评论 0原文

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

三生池水覆流年 2024-12-22 12:56:35

如果您使用 mod_perl 或 fastcgi,其中服务器进程在多个请求中保持不变,则全局变量(您在示例中使用的)可能不会在请求之间重置,而是保留其旧值。

在您的示例中,这意味着如果请求碰巧到达同一服务器进程,则下一个请求可能会看到先前请求设置的 %FORM 值。

如果通过在脚本顶部添加 %FORM = (); 可以解决问题,那么这就是您的问题。您可以通过说 print $test++; 来验证并查看它是否递增。

请注意,这不是真正的解决方案,我建议将真正的代码放在函数或模块中,并在那里使用局部变量和参数,它也更易于维护。并使用一些可用的 Web 应用程序框架(至少是 CGI.pm)。

您还需要解决 SQL 注入安全问题,经验法则:永远不要将变量放在 SQL 语句字符串中,而是执行以下操作:

$dbh->prepare("SELECT ... WHERE This = ? AND That = ?")
$dbh->execute($this, $that);

If you are using mod_perl or fastcgi where the server process is persistent over multiple requests, global variables (which you are using in your example) may not be reset between requests, but keep their old values.

In your example, this means that the next request may see the %FORM values set by the earlier request, if the request happens to come to the same server process.

If by adding %FORM = (); at the top of your script fixes the problem, then this is your issue. You can verify by saying e.g. print $test++; and see if it increments.

Note that this is not the real solution, I would recommend putting your real code inside a function or module and using local variables and parameters there, it is more maintainable as well. And using some of the web application frameworks available (minimally CGI.pm).

You also need to fix the SQL injection security problem, rule of thumb: Never put variables in SQL statement strings, but do something like:

$dbh->prepare("SELECT ... WHERE This = ? AND That = ?")
$dbh->execute($this, $that);
寄居者 2024-12-22 12:56:35

恐怕这个问题太笼统了,对于任何有用的答案,一些代码/伪代码将是必不可少的。但是,完全根据您的要求,它看起来确实像是浏览器缓存问题,或者可能是会话数据缓存问题。就像我说的,公开一些代码/伪代码将有助于更好地理解你的问题

I'm afraid the question is too generic and for any useful answer, a bit of code/pseudo code is going to be essential. However, based entirely on what you've asked, it does look like a browser caching issue, or perhaps a session-data caching issue. Like I say, disclosing a bit of code / pseudo code will help understand your question better

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文