在使用PHP编程的时候,我有一个习惯,不太喜欢使用现成的库文件,例如PHPLib或者其它类似的库,在这个系统中,我也打算自己写一个库文件,它需要处理认证、确认email,更新帐号(密码,email)等事情。
为了在保证该系统安全的同时,不会加重我现有数据库的负担。因此这个新的系统要依赖cookies。这确实是一个两难的选择,因为如果只是设置一个用户名的cookie,是很不安全的,这行不通,但从数据库的负担考虑,我也不能加入一个简单的无序码而交由我的数据库来进行验证。
解决的方法是同时设置两个cookie,一个是用户名的cookie,一个是无序码的cookie。这个无序码实际上是由用户名和一个超级密码(只有程序设计者知道)组合通过md5()函数运算产生的。由于md5()是一个单向的无序码,因此是不可以破解的。在用户更改email时,我也可以用该email和超级密码产生一个无序码,以让用户确认修改。这实际上是一个公匙/私匙类的系统。不明白?不要紧,下面再慢慢说明。
有趣的是,这个系统的扩展能力是可以达到无穷的,因为该系统的主要工作是计算md5()函数的值,而且由web服务器完成,在负载增加时,可以加入其它的服务器来分担负载,虽然认证系统不会拖跨一个数据库,但是这样做就让最终的瓶颈只能出现在数据库上。
以下是该库中的两个函数--记号产生和记号认证函数。
<?php<br> $hidden_hash_var='your_secret_password_here';<br> $LOGGED_IN=false;<br> unset($LOGGED_IN);<br> function user_isloggedin() {<br> global $user_name,$id_hash,$hidden_hash_var,$LOGGED_IN;<br> file://已经进行无序码的检测了吗<br> file://如果是的话,返回该变量<br> if ( isset($LOGGED_IN) ) {<br> return $LOGGED_IN;<br> }<br> file://are both cookies present?<br> if ($user_name && $id_hash) {<br> /*<br> 由cookies中得来的用户名和系统超级密码产生一个认证用的无序码如果该无序码与cookie中的无序码一样,则cookies中的变量是可信的,用户已经登录<br> */<br> $hash=md5($user_name.$hidden_hash_var);<br> if ($hash == $id_hash) {<br> file://无序码符合,设置一个全局变量,这样我们在再次调用该函数的时候,<br> file://就无需再次进行md5()运算<br> $LOGGED_IN=true;<br> return true;<br> } else {<br> file://两个无序码不符合,没有登录<br> $LOGGED_IN=false;<br> return false;<br> }<br> } else {<br> $LOGGED_IN=false;<br> return false;<br> }<br> }<br> function user_set_tokens($user_name_in) {<br> /*<br> 一旦用户名和密码通过验证,就调用这个函数<br> */<br> global $hidden_hash_var,$user_name,$id_hash;<br> if (!$user_name_in) {<br> $feedback .= ' ERROR - User Name Missing When Setting Tokens ';<br> return false;<br> }<br> $user_name=strtolower($user_name_in);<br> file://使用用户名和超级密码创建一个无序码,作判断是否已经登录用<br> $id_hash= md5($user_name.$hidden_hash_var);<br> file://设置cookies的有效期为一个月,可设置为任何的值<br> setcookie('user_name',$user_name,(time()+2592000),'/','',0);<br> setcookie('id_hash',$id_hash,(time()+2592000),'/','',0);<br> }<br> ?>
再来看另一段有趣的代码,用户怎样才能安全地改变他们的email地址呢?他们可以在任何时候改变email地址,但是要进行确认。

Hash操作//为hash表中的字段赋值。成功返回1,失败返回0。若hash表不存在会先创建表再赋值,若字段已存在会覆盖旧值。$ret=$redis->hSet('user','realname','jetwu');//获取hash表中指定字段的值。若hash表不存在则返回false。$ret=$redis->hGet('user','rea

Laravel是目前最为流行的PHPweb框架之一,为开发人员提供了许多强大的功能和组件,其中LaravelHash也是其中之一。LaravelHash是一个用于密码散列的PHP库,其可以用于保护密码的安全,并使应用程序的用户数据更加安全。在本文中,我们将了解LaravelHash的工作原理以及如何使用它来对密码进行散列和验证。前置知识在学习Lara

php提交表单通过后,弹出的对话框怎样在当前页弹出php提交表单通过后,弹出的对话框怎样在当前页弹出而不是在空白页弹出?想实现这样的效果:而不是空白页弹出:------解决方案--------------------如果你的验证用PHP在后端,那么就用Ajax;仅供参考:HTML code<form name="myform"

在Docker中,挂载目录的权限问题通常可以通过以下方法解决:使用-v参数指定挂载目录时添加权限相关的选项。可以通过在挂载的目录后面添加:ro或:rw来指定挂载目录的权限,分别表示只读和读写权限。例如:dockerrun-v/host/path:/container/path:roimage_name在Dockerfile中定义USER指令来指定容器中运行的用户,以确保容器内部的操作符合权限要求。例如:FROMimage_name#CreateanewuserRUNuseradd-ms/bin/

一、什么是哈希算法哈希和散列都来源于单词hash,前者是音译,后者是意译。是一种可以将任意长度的二进制值映射为固定长度二进制值的算法,映射后固定长度的二进制值被称为哈希值。一个优秀的哈希算法需要满足以下几点要求:不能从哈希值反向推导出原始数据;对输入数据非常敏感,一个bit不同就会导致哈希值非常不一样;散列冲突的概率要很小;哈希算法的计算过程要足够简单高效,即使原始数据很长,也能很快得到哈希值;二、哈希算法的使用场景2.1 安全加密比较常见的哈希加密算法有MD5(MD5 Message-Dige

散列方法的主要思想是根据结点的关键码值来确定其存储地址:以关键码值K为自变量,通过一定的函数关系h(K)(称为散列函数),计算出对应的函数值来

Vue3中name有什么用呢?1.在递归组件的时候需要定义name2.配合keep-aliveincludeexclude可以缓存组件3.在Vue有报错或者调试的时候可以看到组件的nameVue3定义name1.自动生成只要在script开启setup语法糖模式单文件组件会自动根据文件名生成对应的name选项例如Tree.vue那他的name就是Tree自动生成,这样做有一个弊端如果想修改name需要修改组件名称如果有地方import该组件需要一并修改。2.在开启一个script用来定义name

Redis是一种常见的高性能键值存储数据库。它支持多种数据类型,如字符串(string)、哈希(hash)、列表(list)、集合(set)和有序集合(sortedset),并提供各种命令来操作这些数据类型。在本文中,我们将深入了解三种最常用的Redis数据类型:key,string和hash,并介绍它们的常见命令。keyRedis的key是字符串类型,可


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

SublimeText3 English version
Recommended: Win version, supports code prompts!

Safe Exam Browser
Safe Exam Browser is a secure browser environment for taking online exams securely. This software turns any computer into a secure workstation. It controls access to any utility and prevents students from using unauthorized resources.

Zend Studio 13.0.1
Powerful PHP integrated development environment

DVWA
Damn Vulnerable Web App (DVWA) is a PHP/MySQL web application that is very vulnerable. Its main goals are to be an aid for security professionals to test their skills and tools in a legal environment, to help web developers better understand the process of securing web applications, and to help teachers/students teach/learn in a classroom environment Web application security. The goal of DVWA is to practice some of the most common web vulnerabilities through a simple and straightforward interface, with varying degrees of difficulty. Please note that this software

mPDF
mPDF is a PHP library that can generate PDF files from UTF-8 encoded HTML. The original author, Ian Back, wrote mPDF to output PDF files "on the fly" from his website and handle different languages. It is slower than original scripts like HTML2FPDF and produces larger files when using Unicode fonts, but supports CSS styles etc. and has a lot of enhancements. Supports almost all languages, including RTL (Arabic and Hebrew) and CJK (Chinese, Japanese and Korean). Supports nested block-level elements (such as P, DIV),
