一()登()

您好,欢迎来到中国供应商!
当前位置:&企业首页
公司注册地址:
深圳市观澜镇
主营产品:
供应信息分类
联系人:田付建
职 位 :销售工程师电 话 :0手 机 :传 真 :1
地 址 :广东 深圳 宝安区 深圳市观澜镇福民福苑工业区1栋
免责声明:
本商铺内所展现的公司信息、产品信息及其他相关信息均由商铺所属企业自行提供,信息的真实性、准确性和合法性由商铺所属企业完全负责。中国供应商对此不承担任何保证责任。
友情提醒:
建议您在购买相关产品前务必确认供应商资质及产品质量,过低的价格有可能是虚假信息,请谨慎对待,谨防欺诈行为。
地址:广东 深圳 宝安区 深圳市观澜镇福民福苑工业区1栋
按拼音检索:
||||||||||||||||||||||||||
技术支持:C#有效防止同一账号多次登录(附三种方法)
作者:熊灬孩灬子
字体:[ ] 类型:转载 时间:
这篇文章主要介绍了C#有效防止同一账号多次登录的方法,有效防止同一账号多次登录的方法很多,比如用数据库来记录用户登录情况、用Application来保存用户登录信息、用Cache来保存信息等,感兴趣的小伙伴们可以参考一下
本文先为大家介绍如何利用缓存Cache方便地实现此功能。
Cache与Session这二个状态对像的其中有一个不同之处,Cache是一个全局对象,作用的范围是整个应用程序,所有用户;
而Session是一个用户会话对象,是局部对象,用于保存单个用户的信息。
只要把每次用户登录后的用户信息存储在Cache中,把Cache的Key名设为用户的登录名,Cache的过期时间设置为Session的超时时间,在用户每次登录的时候去判断一下Cache[用户名]是否有值,如果没有值,证明该用户没有登录,否则该用户已登录。
为大家举一个例子吧。
/// &summary&
/// 防止多次登录
/// &/summary&
/// &param name="sender"&&/param&
/// &param name="e"&&/param&
private void Button1_Click(object sender, System.EventArgs e)
string strUser = string.E
string strCacheKey = this.TextBox1.T
strUser = Convert.ToString(Cache[strCacheKey]);
if (strUser == string.Empty)
TimeSpan SessTimeOut = new TimeSpan(0, 0, System.Web.HttpContext.Current.Session.Timeout, 0, 0);
Cache.Insert(strCacheKey, strCacheKey, null, DateTime.MaxValue, SessTimeOut, CacheItemPriority.NotRemovable, null);
Session["User"] = strCacheK
this.Label1.Text = Session["User"].ToString();
this.Label1.Text = "这个用户已经登录!";
在网上又找了下,发现了另外两种解决方案:
1、通过数据库状态位判断该用户是否已经登录。
2、利用session监听器监听每一个登录用户的登录情况。
第一种解决方案很简单,但需要考虑用户非正常退出的情况,如直接关闭浏览器等等,可用性较低。
接下来,主要介绍第二种方案的具体实现:利用session监听器监听每一个登录用户的登录情况。
A.用户登录后,先去数据库查询该登录名是否存在、是否锁定,在登录名存在且非锁定的情况下,从application内置作用域对象中取出所有的登录信息,查看该登录名是否已经登录,如果登录了,就友好提示下;反之表示可以登录,将该登录信息保存在application中。
主要代码如下:
//所有的登录信息
Map&String, String& loginUserMap = (Map&String, String&) super.getApplicationAttr(Constant.LOGIN_USER_MAP);
boolean isExist =
String sessionId = super.getSessionId(false);
if(loginUserMap==null){
loginUserMap = new HashMap&String, String&();
for (String username : loginUserMap.keySet()) {
//判断是否已经保存该登录用户的信息,是否为同一个用户进行重复登录
if(!username.equals(user.getFuUserName()) || loginUserMap.containsValue(sessionId)){
if(isExist){
//该用户已登录
//该用户没有登录
loginUserMap.put(result.getFuUserName(), sessionId);
B.登录考虑完之后,来考虑考虑退出。
用户正常退出时,我们需要将该用户的登录信息从session中移除。我们可以写一个Session监听器,监听sessioon销毁的时候,我们将登录的用户注销掉,也就是从application中移除。表示该用户已经下线了。
主要代码如下:
public void sessionDestroyed(HttpSessionEvent event) {
//在session销毁的时候 把loginUserMap中保存的键值对清除
User user = (User)event.getSession().getAttribute("loginUser");
if(user!=null){
Map&String, String& loginUserMap = (Map&String, String&)event.getSession().getServletContext().getAttribute("loginUserMap");
loginUserMap.remove(user.getFuUserName());
event.getSession().getServletContext().setAttribute("loginUserMap",loginUserMap);
另外,还有一个问题,如果说登录的用户突然关闭了浏览器而没有点击退出按钮。那么可以利用beforeunload 事件,在浏览器刷新或者关闭的时候触发。
//在刷新或关闭时调用的事件
$(window).bind('beforeunload',function(){
url:"${ctx}/system/user/user!logout.action",
type:"post",
success:function(){
alert("您已退出登录");
这样基本就实现了需求。
大家可以把上面代码运用到自己的项目中,检测一下,有效的防止同一账号的重复登录,希望大家喜欢这些方法。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具您还没有注册17xie会员?
欢迎来到一起写
记住我的用户名tencent API(一)
登录/校验登录态 - 推酷
tencent API(一)
登录/校验登录态
登录/校验登录态
通过调用Tencent类的login函数发起登录/校验登录态。
该API具有两个作用:
(1)如果开发者没有调用mTencent实例的setOpenId、setAccessToken API,则该API执行正常的登录操作;
(2)如果开发者先调用mTencent实例的setOpenId、setAccessToken API,则该API执行校验登录态的操作。如果登录态有效,则返回成功给应用,如果登录态失效,则会自动进入登录流程,将最新的登录态数据返回给应用。
建议开发者在每次应用启动时调用一次该API(先调用setOpenId、setAccessToken),以确保每次打开应用时用户都是有登录态的。
调用登录API参数说明如下:
参数 参数说明
调用者activity。应用使用SDK时,会从应用自己的Activity跳转到SDK的Activity,应用调用SDK的Activity即为这里的调用者activity。
应用需要获得哪些API的权限,由“,”分隔。
例如:SCOPE = “get_user_info,add_topic”;如果要所有,直接用all
回调API,IUiListener实例。
& & &基本流程就是
&所以第一步就是自定义一个Activity:
& & & & & & &
* 登入验证
* @author tanlvxu
public class MainActivity extends Activity implements OnClickListener{
private Handler mH
private TextView mBaseMessageT//打印登入后读取的base信息
private TextView mMessageT//打印登入后读取的message信息
private Dialog mProgressD //判断是否接收到信息
private Tencent mT //主控制
private EditText mEtAppid =// 账号输入框
private ImageView mLoginB// 登入按钮
* 线程接收
* @param base
* @param msg
private void showResult(final String base, final String msg) {
mHandler.post(new Runnable() {
public void run() {
if (mProgressDialog.isShowing())
mProgressDialog.dismiss();
mBaseMessageText.setText(base);
mMessageText.setText(msg);
* 信息接收类
* @author tanlvxu
private class BaseUiListener implements IUiListener {
public void onComplete(Object response) {
showResult(&onComplete:&, response.toString());
doComplete(response);
protected void doComplete(Object values) {
public void onError(UiError e) {
showResult(&onError:&, &code:& + e.errorCode + &, msg:&
+ e.errorMessage + &, detail:& + e.errorDetail);
public void onCancel() {
showResult(&onCancel&, &&);
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final Context ctxContext = this.getApplicationContext();
mEtAppid = new EditText(this);
* app_id输入框
new AlertDialog.Builder(this)
.setTitle(&请输入APP_ID&)
.setCancelable(false)
.setIcon(android.R.drawable.ic_dialog_info)
.setView(mEtAppid)
.setNegativeButton(&取消&,
new android.content.DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int which) {
// TODO Auto-generated method stub
mTencent = Tencent.createInstance(AppConstants.APP_ID, ctxContext);
mHandler = new Handler();
mProgressDialog = new ProgressDialog(
MainActivity.this);
initViews();
.setPositiveButton(&确定&,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int which) {
String appid = mEtAppid.getText().toString()
if (!(&&.equals(appid))) {
mTencent = Tencent.createInstance(appid, ctxContext);
mTencent = Tencent.createInstance(AppConstants.APP_ID, ctxContext);
mHandler = new Handler();
mProgressDialog = new ProgressDialog(
MainActivity.this);
initViews();
}).show();
* 初始化界面
private void initViews() {
mLoginButton = (ImageView) findViewById(R.id.login_btn);
mBaseMessageText = (TextView) findViewById(R.id.base_message_tv);
mMessageText = (TextView) findViewById(R.id.message_tv);
updateLoginButton();
mLoginButton.setOnClickListener(this) ;
* 更新登入状态按钮
private void updateLoginButton() {
mLoginButton.setImageResource(mTencent.isSessionValid()?_tencent_open_logout
: _tencent_open_login) ;
public void onClick(View v) {
// TODO Auto-generated method stub
Animation shake = AnimationUtils.loadAnimation(this, R.anim.shake);
switch (v.getId()) {
case R.id.login_btn:
onClickLogin();
v.startAnimation(shake);
private void onClickLogin() {
if (mTencent.isSessionValid()) {
mTencent.logout(this);
updateLoginButton();
IUiListener listener = new BaseUiListener() {
protected void doComplete(Object values) {
updateLoginButton();
mTencent.login(this, &all&, listener);//跳转至sdk登入界面
& & &跳转至登入界面
&登入成功后返回的信息
已发表评论数()
已收藏到推刊!
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
没有分页内容
图片无法显示
视频无法显示
与原文不一致

我要回帖

更多关于 一步电子网登录 的文章

 

随机推荐