TSynAuthentication SESSION验证

服务端维护的SESSIONS,实质上是一个array of integer,保存的是客户端的SESSIONID。

SESSIONID可以由客户端来生成,只要客户端不关闭,它的SESSIONID就不变,每次申请都提交这个SESSIONID。

通过TOKEN验证的客户端,它的SESSIONID追加到SESSIONS,如果已经存在,就不要追加。

客户端退出时,要从SEIIONS里面删除它的SESSIONID。

TSynAuthentication = class(TSynAuthenticationAbstract)

HTTP验证SESSION用的控件。

包括一些操作SESSION的方法:

检查SESSION是否已经存在

function SessionExists(aID: integer): boolean;

删除一个SESSION

procedure RemoveSession(aID: integer);

创建一个新的SESSION

function CreateSession(const User: RawUTF8; Hash: cardinal): integer; virtual;

它们调用的其实是更加低级的函数:

function FastLocateIntegerSorted(P: PIntegerArray; R: PtrInt; Value: integer): PtrInt;

function AddSortedInteger(var Values: TIntegerDynArray; var ValuesCount: integer;
Value: integer; CoValues: PIntegerDynArray=nil): PtrInt;

procedure DeleteInteger(var Values: TIntegerDynArray; Index: PtrInt);

下面是演示代码:

var
sessions: TIntegerDynArray;
sessionscount: Integer =0;

// 增加一个session

AddSortedInteger(Sessions,SessionsCount,sessionid);

//删除一个SESSION

procedure RemoveSession(sessionid: integer);
var i: integer;
begin
Lock;
try
i := FastFindIntegerSorted(pointer(Sessions),SessionsCount-1,sessionid);// 找到序号
if i>=0 then
DeleteInteger(Sessions,SessionsCount,i);//根据序号删除
finally
UnLock;
end;
end;

//session是否已经存在

function SessionExists(sessionid: integer): boolean;
begin
Lock;
try
result := FastFindIntegerSorted(pointer(Sessions),SessionsCount-1,sessionid)>=0;
finally
UnLock;
end;
end;

TSynAuthentication SESSION验证的更多相关文章

  1. asp.net获取当前页面文件名,参数,域名等方法。统一session验证和权限验证的方法

    转:http://blog.csdn.net/llll29550242/article/details/6054323 ASP.net后台获取当前页面的文件名 System.IO.Path.GetFi ...

  2. session验证登陆- 页面跳转

    用session验证登陆,当用户想访问一个页面时由于没有登录,就跳转到登录页面,登录后跳转到用户请求的页面,在session跳转中传上次请求的页面.  怎么获得这个url值并跳转到该页面呢? 以此跳转 ...

  3. ThinkPhp框架 分页 和session验证的使用

    TP框架分页要使用到类文件,可以使用自己的类文件,也可以使用tp框架自带的类文件. 首先导入分页的类文件(Page.class.php): <?php namespace Home\shuju; ...

  4. .net MVC使用Session验证用户登录(转载)

    .net MVC使用Session验证用户登录   用最简单的Session方式记录用户登录状态 1.添加DefaultController控制器,重写OnActionExecuting方法,每次访问 ...

  5. Asp.Net使用加密cookie代替session验证用户登录状态 源码分享

    首先 session 和 cache 拥有各自的优势而存在.  他们的优劣就不在这里讨论了. 本实例仅存储用户id于用户名,对于多级权限的架构,可以自行修改增加权限字段   本实例采用vs2010编写 ...

  6. 第二百七十节,Tornado框架-生成验证码图片,以及验证码结合Session验证

    Tornado框架-生成验证码图片,以及验证码结合Session验证 第一.生成验证码图片  生成验证码图片需要两个必须模块 1.python自带的random(随机模块) 2.Pillow()图像处 ...

  7. Django之session验证的三种姿势

    一.什么是session session是保存在服务端的键值对,Django默认支持Session,并且默认是将Session数据存储在数据库中,即:django_session 表中. 二.FVB中 ...

  8. easyui datagrid 禁止选中行 EF的增删改查(转载) C# 获取用户IP地址(转载) MVC EF 执行SQL语句(转载) 在EF中执行SQL语句(转载) EF中使用SQL语句或存储过程 .net MVC使用Session验证用户登录 PowerDesigner 参照完整性约束(转载)

    easyui datagrid 禁止选中行   没有找到可以直接禁止的属性,但是找到两个间接禁止的方式. 方式一: //onClickRow: function (rowIndex, rowData) ...

  9. 过滤器+用session验证是否登陆过

    过滤器: public class MyActionFilter : ActionFilterAttribute//继承ActionFilterAttribute类 { public override ...

随机推荐

  1. sicily 数据结构 1014. Translation

    Description You have just moved from Waterloo to a big city. The people here speak an incomprehensib ...

  2. C中级 消息队列设计

    引言  - 补充好开始 消息队列在游戏服务器层应用非常广泛. 应用于各种耗时的IO操作业务上.消息队列可以简单理解为 [消息队列 = 队列 + 线程安全]本文参照思路如下, 最后献上一个大神们斗法的场 ...

  3. mysql分组取前N记录

    http://blog.csdn.net/acmain_chm/article/details/4126306 http://bbs.csdn.net/topics/390958705 1 我只用到了 ...

  4. aspxpivotgrid排序

    protected virtual void SetSortBySummary() { foreach (PivotGridField field in grid.Fields) { if (fiel ...

  5. js对页面对float类型的数据格式化处理

    <script>        document.write(parseFloat(<s:property value="assureterm"/>)); ...

  6. Spring + MyBatis 多数据源实现

    近期,在项目中需要做分库,但是因为某些原因,没有采用开源的分库插件,而是采用了同事之前弄得多数据源形式实现的分库.对于多数据源,本人在实际项目也中遇到的不多,之前的项目大多是服务化,以RPC的形式获得 ...

  7. LeetCode解题报告—— Word Search & Subsets II & Decode Ways

    1. Word Search Given a 2D board and a word, find if the word exists in the grid. The word can be con ...

  8. PHP PDO类 单例

    <?php /*//pdo连接信息 $pdo=array("mysql:host=localhost;dbname=demo;charset=utf8","root ...

  9. UVALive - 7042 The Problem to Make You Happy 博弈

    题目大意:给你一个有向图, Bob 和 Alice 在做游戏,每轮他们走一步,当Bob 和 Alice在同一个点或者 Bob无路可走,Bob输,否则Alice输. 思路:因为在Bob赢的时候存在有环的 ...

  10. 如何开启apache的PHP-FPM实例

    PHP-FPM 作为 FastCGI 进程管理器而广为熟知,它是PHPFastCGI 实现的改进,带有更为有用的功能,用于处理高负载的服务器和网站.下面列出其中一些功能: 新功能 拥有具有优雅(gra ...