Heim php教程 php手册 PHP利用session与cookies防重复提交实例

PHP利用session与cookies防重复提交实例

May 25, 2016 pm 04:54 PM
select

在网页开发中防止重复提交是一个比较实用并且也常用碰到的问题了,除了我们可以直接在数据库查询用户是否提交相同数据进行过滤外,我们还可以在用户提交数据时就防止这类事情发现,下面我来介绍基于session与cookies防重复提交一些基于实现方法。

防止刷新或再交提交

所以就考虑增加一个参数来防止这类情况的发生,COOKIE和SESSION可供选择,不过 COOKIE是客户端的,如果人家禁用COOKIE的话,照样可以恶意刷新点击数。还是用SESSION的好,IP+URL参数的MD5值做 SESSION名 

实现原理 设置 max_reloadtime =100; //设置页面刷新最长间隔时间

用户第一次打开页面 记录当前的时间保存在 session_start

用户第二次打开页面(判断 session_start是否存在) 用当前时间和 session_start 相减 得到差值 time_passed

当 time_passed

<?php
session_start();
$k = $_GET[&#39;k&#39;];
$t = $_GET[&#39;t&#39;];
//防刷新时间
$allowTime = 1800;
$ip = get_client_ip();
$allowT = md5($ip . $k . $t);
if (!isset($_SESSION[$allowT])) {
    $refresh = true;
    $_SESSION[$allowT] = time();
} elseif (time() - $_SESSION[$allowT] > $allowTime) {
    $refresh = true;
    $_SESSION[$allowT] = time();
} else {
    $refresh = false;
}
?>
Nach dem Login kopieren

防表单重复提交

<?php
/* 改进版
    PHP防止用户刷新页面(Refresh or Reload),重复提交表单内容。 
    由于表单变量的内容由$_POST[&#39;name&#39;]引用,也许在处理完表单后,直接将$_POST[&#39;name&#39;]销毁(unset())即可。其实不然。可能由于页面默认对表单内容进行了缓存,所以,即使销毁了$_POST[&#39;name&#39;],刷新后,$_POST[&#39;name&#39;]还是会被赋值,一样有效。   
    可利用Session解决。首先给Session赋个值,比如400,第一次提交成功后改变Session的值,当第二次提交时去检查这个Session 的值,如果不是400,就不再处理表单中的数据。 
    可设置Session的有效时间?    
*/
if (isset($_POST[&#39;action&#39;]) && $_POST[&#39;action&#39;] == &#39;submitted&#39;) {
    session_start();
    isset($_SESSION[&#39;num&#39;]) or die("no session");
    if ($_SESSION[&#39;num&#39;] == 400) {
        print &#39;<pre class="brush:php;toolbar:false">&#39;;
        print_r($_POST);
        print &#39;<a href="&#39; . $_SERVER[&#39;PHP_SELF&#39;] . &#39;">Please try again</a>&#39;;
        print &#39;
Nach dem Login kopieren
'; $_SESSION['num'] = 500; } else { print '
&#39;;
        print_r($_POST);
        echo "However you have submitted";
        print &#39;
Nach dem Login kopieren
'; } } else { session_start() or die("session is not started"); $_SESSION['num'] = 400; ?>
Name:
Email:
Beer:

例,一个基于smarty演示版

<?php
$code = mt_rand(0, 1000000);
setcookie(&#39;addtips&#39;, $code, time() + 300);
if (isset($_POST[&#39;submit&#39;])) {
    if ($_COOKIE[&#39;addtips&#39;] != $_POST[&#39;code&#39;]) {
        echo "请不要刷新本页面或重复提交表单";
        exit();
    }
}
$smarty->assign(&#39;code&#39;, $code);
?>
Nach dem Login kopieren

10./////防止表单重复提交

在tpl模板中

1.

<?php
/*利用PHP的Session功能,也能避免PHP表单重复提交。Session保存在服务器端,在PHP运行过程中可以改变Session变量,下次访问这个变量时,得到的是新赋的值,所以,可以用一个Session变量记录表单提交的值,如果不匹配,则认为是用户在重复提交
*/
session_start(); //根据当前SESSION生成随机数
$code = mt_rand(0, 1000000);
$_SESSION[&#39;code&#39;] = $code;
//在表单中隐藏传递:
 < inputtype = "hidden"name = "originator"value = "< ?=$code?>" >
//在接收页代码如下:
session_start();
if (isset($_POST[&#39;originator&#39;])) {
    if ($_POST[&#39;originator&#39;] == $_SESSION[&#39;code&#39;]) {
        // 处理该表单的语句,省略
        
    } else {
        echo &#39;请不要刷新本页面或 
重复提交表单!&#39;;
    }
}
?>
Nach dem Login kopieren


永久链接:

转载随意!带上文章地址吧。

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Asynchrone Verarbeitungsmethode von Select Channels Go zur gleichzeitigen Programmierung mit Golang Asynchrone Verarbeitungsmethode von Select Channels Go zur gleichzeitigen Programmierung mit Golang Sep 28, 2023 pm 05:27 PM

Asynchrone Verarbeitungsmethode der gleichzeitigen Programmierung von SelectChannelsGo mit Golang Einführung: Die gleichzeitige Programmierung ist ein wichtiger Bereich in der modernen Softwareentwicklung, der die Leistung und Reaktionsfähigkeit von Anwendungen effektiv verbessern kann. In der Go-Sprache kann die gleichzeitige Programmierung mithilfe von Channels- und Select-Anweisungen einfach und effizient implementiert werden. In diesem Artikel wird die Verwendung von Golang für die asynchrone Verarbeitungsmethode der gleichzeitigen Programmierung von SelectChannelsGo vorgestellt und spezifische Informationen bereitgestellt

So verbergen Sie das ausgewählte Element in jquery So verbergen Sie das ausgewählte Element in jquery Aug 15, 2023 pm 01:56 PM

So verbergen Sie das Select-Element in JQuery: 1. Methode hide (), fügen Sie die jQuery-Bibliothek in die HTML-Seite ein, Sie können verschiedene Selektoren verwenden, um das Select-Element auszublenden, der ID-Selektor ersetzt die SelectId durch die ID des von Ihnen ausgewählten Elements tatsächlich verwenden; 2. css()-Methode, verwenden Sie den ID-Selektor, um das ausgewählte Element auszuwählen, das ausgeblendet werden muss, verwenden Sie die css()-Methode, um das Anzeigeattribut auf „none“ zu setzen, und ersetzen Sie selectId durch die ID des ausgewählten Elements.

So implementieren Sie die Änderungsereignisbindung ausgewählter Elemente in jQuery So implementieren Sie die Änderungsereignisbindung ausgewählter Elemente in jQuery Feb 23, 2024 pm 01:12 PM

jQuery ist eine beliebte JavaScript-Bibliothek, die zur Vereinfachung der DOM-Manipulation, Ereignisbehandlung, Animationseffekte usw. verwendet werden kann. Bei der Webentwicklung stoßen wir häufig auf Situationen, in denen wir die Ereignisbindung für ausgewählte Elemente ändern müssen. In diesem Artikel wird erläutert, wie Sie mit jQuery ausgewählte Elementänderungsereignisse binden, und es werden spezifische Codebeispiele bereitgestellt. Zuerst müssen wir ein Dropdown-Menü mit Optionen erstellen, die Beschriftungen verwenden:

Was ist der Grund, warum Linux select verwendet? Was ist der Grund, warum Linux select verwendet? May 19, 2023 pm 03:07 PM

Da Select es Entwicklern ermöglicht, gleichzeitig auf mehrere Dateipuffer zu warten, kann dies die E/A-Wartezeit verkürzen und die E/A-Effizienz des Prozesses verbessern. Die Funktion select() ist eine E/A-Multiplexfunktion, die es dem Programm ermöglicht, mehrere Dateideskriptoren zu überwachen und darauf zu warten, dass einer oder mehrere der überwachten Dateideskriptoren „bereit“ werden. Bezieht sich auf: die Datei Der Deskriptor ist nicht mehr blockiert und kann für bestimmte Arten von E/A-Vorgängen verwendet werden, einschließlich lesbarer, beschreibbarer und Ausnahmen. select ist eine Computerfunktion, die sich in der Header-Datei #include befindet. Diese Funktion wird verwendet, um Dateideskriptoränderungen zu überwachen – Lesen, Schreiben oder Ausnahmen. 1. Einführung in die Auswahlfunktion Die Auswahlfunktion ist eine E/A-Multiplexfunktion.

So verwenden Sie die Select-Syntax von MySQL So verwenden Sie die Select-Syntax von MySQL Jun 01, 2023 pm 07:37 PM

1. Bei Schlüsselwörtern in SQL-Anweisungen wird die Groß-/Kleinschreibung nicht beachtet. SELECT entspricht SELECT und FROM entspricht from. 2. Um alle Spalten aus der Benutzertabelle auszuwählen, können Sie den Spaltennamen durch das Symbol * ersetzen. Syntax – Dies ist ein Kommentar – Abfrage [alle] Daten aus der durch FEOM angegebenen [Tabelle] * bedeutet [alle Spalten] SELECT*FROM – Abfrage der angegebenen [Tabelle] aus FROM Daten des Spaltennamens (Feld) SELECT Spaltenname FROM Tabellennamensinstanz – Hinweis: Verwenden Sie englische Kommas, um mehrere Spalten zu trennen. Wählen Sie Benutzername und Passwort aus

Implementieren Sie Select Channels Go zur Optimierung der gleichzeitigen Programmierleistung durch Golang Implementieren Sie Select Channels Go zur Optimierung der gleichzeitigen Programmierleistung durch Golang Sep 27, 2023 pm 01:09 PM

Implementieren von SelectChannels durch Golang Leistungsoptimierung der gleichzeitigen Go-Programmierung In der Go-Sprache ist es sehr üblich, Goroutine und Channel zum Implementieren der gleichzeitigen Programmierung zu verwenden. Wenn wir mit mehreren Kanälen arbeiten, verwenden wir normalerweise Select-Anweisungen zum Multiplexen. Bei großer Parallelität kann die Verwendung von Select-Anweisungen jedoch zu Leistungseinbußen führen. In diesem Artikel stellen wir einige Implementierungen von select über Golang vor

Wählen Sie Channels Go-Parallelprogrammierung für Zuverlässigkeit und Robustheit mit Golang aus Wählen Sie Channels Go-Parallelprogrammierung für Zuverlässigkeit und Robustheit mit Golang aus Sep 28, 2023 pm 05:37 PM

SelectChannels für Zuverlässigkeit und Robustheit mithilfe von Golang Einführung in die gleichzeitige Programmierung: In der modernen Softwareentwicklung ist Parallelität zu einem sehr wichtigen Thema geworden. Durch die Verwendung gleichzeitiger Programmierung können Programme schneller reagieren, Rechenressourcen effizienter nutzen und große parallele Rechenaufgaben besser bewältigen. Golang ist eine sehr leistungsfähige gleichzeitige Programmiersprache. Sie bietet eine einfache und effektive Möglichkeit, gleichzeitige Programmierung durch Go-Coroutinen und Kanalmechanismen zu implementieren.

So verwenden Sie Golang für die gleichzeitige Programmierung von Select Channels Go So verwenden Sie Golang für die gleichzeitige Programmierung von Select Channels Go Sep 27, 2023 pm 09:07 PM

So verwenden Sie Golang für die gleichzeitige Programmierung von SelectChannelsGo. Die Go-Sprache ist eine Sprache, die sich sehr gut für die gleichzeitige Programmierung eignet. Der Kanal (Channel) und die Select-Anweisung sind zwei wichtige Elemente, um Parallelität zu erreichen. In diesem Artikel wird die Verwendung von Golangs SelectChannels für die gleichzeitige Programmierung vorgestellt und spezifische Codebeispiele bereitgestellt. 1. Das Konzept des Kanals (Kanal) Kanal wird für die Kommunikation und Daten zwischen Goroutinen verwendet.

See all articles