PHP利用session与cookies防重复提交实例
在网页开发中防止重复提交是一个比较实用并且也常用碰到的问题了,除了我们可以直接在数据库查询用户是否提交相同数据进行过滤外,我们还可以在用户提交数据时就防止这类事情发现,下面我来介绍基于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['k']; $t = $_GET['t']; //防刷新时间 $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; } ?>
防表单重复提交
<?php /* 改进版 PHP防止用户刷新页面(Refresh or Reload),重复提交表单内容。 由于表单变量的内容由$_POST['name']引用,也许在处理完表单后,直接将$_POST['name']销毁(unset())即可。其实不然。可能由于页面默认对表单内容进行了缓存,所以,即使销毁了$_POST['name'],刷新后,$_POST['name']还是会被赋值,一样有效。 可利用Session解决。首先给Session赋个值,比如400,第一次提交成功后改变Session的值,当第二次提交时去检查这个Session 的值,如果不是400,就不再处理表单中的数据。 可设置Session的有效时间? */ if (isset($_POST['action']) && $_POST['action'] == 'submitted') { session_start(); isset($_SESSION['num']) or die("no session"); if ($_SESSION['num'] == 400) { print '<pre class="brush:php;toolbar:false">'; print_r($_POST); print '<a href="' . $_SERVER['PHP_SELF'] . '">Please try again</a>'; print '
'; print_r($_POST); echo "However you have submitted"; print '
例,一个基于smarty演示版
<?php $code = mt_rand(0, 1000000); setcookie('addtips', $code, time() + 300); if (isset($_POST['submit'])) { if ($_COOKIE['addtips'] != $_POST['code']) { echo "请不要刷新本页面或重复提交表单"; exit(); } } $smarty->assign('code', $code); ?>
10./////防止表单重复提交
在tpl模板中
1.
<?php /*利用PHP的Session功能,也能避免PHP表单重复提交。Session保存在服务器端,在PHP运行过程中可以改变Session变量,下次访问这个变量时,得到的是新赋的值,所以,可以用一个Session变量记录表单提交的值,如果不匹配,则认为是用户在重复提交 */ session_start(); //根据当前SESSION生成随机数 $code = mt_rand(0, 1000000); $_SESSION['code'] = $code; //在表单中隐藏传递: < inputtype = "hidden"name = "originator"value = "< ?=$code?>" > //在接收页代码如下: session_start(); if (isset($_POST['originator'])) { if ($_POST['originator'] == $_SESSION['code']) { // 处理该表单的语句,省略 } else { echo '请不要刷新本页面或 重复提交表单!'; } } ?>
永久链接:
转载随意!带上文章地址吧。

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Méthode de traitement asynchrone de la programmation simultanée SelectChannelsGo à l'aide de golang Introduction : La programmation simultanée est un domaine important dans le développement de logiciels modernes, qui peut améliorer efficacement les performances et la réactivité des applications. Dans le langage Go, la programmation simultanée peut être implémentée de manière simple et efficace à l'aide des instructions Channels et Select. Cet article explique comment utiliser Golang pour les méthodes de traitement asynchrone de la programmation simultanée SelectChannelsGo et fournit des informations spécifiques.

Comment masquer l'élément select dans jquery : 1. méthode hide(), introduisez la bibliothèque jQuery dans la page HTML, vous pouvez utiliser différents sélecteurs pour masquer l'élément select, le sélecteur ID remplace le selectId par l'ID de l'élément select que vous utilisez réellement ; 2. la méthode css(), utilisez le sélecteur d'ID pour sélectionner l'élément de sélection qui doit être masqué, utilisez la méthode css() pour définir l'attribut d'affichage sur aucun et remplacez selectId par l'ID de l'élément de sélection.

jQuery est une bibliothèque JavaScript populaire qui peut être utilisée pour simplifier la manipulation du DOM, la gestion des événements, les effets d'animation, etc. Dans le développement Web, nous rencontrons souvent des situations dans lesquelles nous devons modifier la liaison d'événements sur des éléments sélectionnés. Cet article explique comment utiliser jQuery pour lier des événements de modification d'éléments sélectionnés et fournit des exemples de code spécifiques. Tout d'abord, nous devons créer un menu déroulant avec des options utilisant des étiquettes :

Étant donné que select permet aux développeurs d'attendre plusieurs tampons de fichiers en même temps, cela peut réduire le temps d'attente des E/S et améliorer l'efficacité des E/S du processus. La fonction select() est une fonction de multiplexage IO qui permet au programme de surveiller plusieurs descripteurs de fichiers et d'attendre qu'un ou plusieurs des descripteurs de fichiers surveillés deviennent « prêts » ; l'état dit « prêt » fait référence à : le fichier ; Le descripteur n'est plus bloqué et peut être utilisé pour certains types d'opérations d'E/S, y compris les opérations en lecture, en écriture et les exceptions. select est une fonction informatique située dans le fichier d'en-tête #include. Cette fonction est utilisée pour surveiller les modifications des descripteurs de fichiers - lecture, écriture ou exceptions. 1. Introduction à la fonction de sélection La fonction de sélection est une fonction de multiplexage IO.

1. Les mots clés dans les instructions SQL ne sont pas sensibles à la casse. SELECT équivaut à SELECT et FROM équivaut à from. 2. Pour sélectionner toutes les colonnes de la table des utilisateurs, vous pouvez utiliser le symbole * pour remplacer le nom de la colonne. Syntaxe - ceci est un commentaire - interrogez [toutes] les données de la [table] spécifiée par FEOM * signifie [toutes les colonnes] SELECT*FROM - interrogez les données spécifiées de la [table] spécifiée à partir des données FROM. nom de colonne (champ) SELECT nom de colonne FROM instance de nom de table - Remarque : utilisez des virgules anglaises pour séparer plusieurs colonnes selectusername, passwordfrom

Implémentation de SelectChannels via golang Optimisation des performances de la programmation simultanée Go Dans le langage Go, il est très courant d'utiliser goroutine et canal pour implémenter la programmation simultanée. Lorsqu'il s'agit de plusieurs canaux, nous utilisons généralement des instructions select pour le multiplexage. Cependant, dans le cas d'une concurrence à grande échelle, l'utilisation d'instructions select peut entraîner une dégradation des performances. Dans cet article, nous présenterons quelques implémentations de select via golang

Sélectionnez des canaux pour la fiabilité et la robustesse à l'aide de Golang Introduction à la programmation simultanée : dans le développement de logiciels modernes, la concurrence est devenue un sujet très important. L'utilisation de la programmation simultanée peut rendre les programmes plus réactifs, utiliser les ressources informatiques plus efficacement et être mieux à même de gérer des tâches informatiques parallèles à grande échelle. Golang est un langage de programmation simultanée très puissant. Il fournit un moyen simple et efficace de mettre en œuvre la programmation simultanée via des coroutines go et des mécanismes de canal.

Comment utiliser Golang pour la programmation simultanée SelectChannelsGo Le langage Go est un langage très adapté à la programmation simultanée, dans lequel le canal (Channel) et l'instruction Select sont deux éléments importants pour obtenir la concurrence. Cet article explique comment utiliser SelectChannels de Golang pour la programmation simultanée et fournit des exemples de code spécifiques. 1. Le concept de canal Channel est utilisé pour la communication et les données entre les goroutines
