A. js怎么获得服务器端的session id
这个id不就是session的id吗?如果你要用js去获取,那得用ajax的方式去获取吧。session.getId()方法就是它的值
B. 如何通过HttpPost从服务器上获得一个sessionid
ava's Web Service is different from HttpPost, HttpGet and HttpResponse that kind of things. It is more easy to pass anything, any Object you like.
如果要利用Web Service返回一个sessionid的话,可以使用从Server返回返回值的形式,也可以在Client端实现SOAPHandler,然后在public boolean handleMessage(SOAPMessageContext context)方法中处理response的cookie,利用正则表达式获取JSESSIONID的值。
因为handleMessage每次都会首先执行,不管是request还是response过程,所以我只谈谈第一种方法,顺便对session过期也做下测试。以下是Demo及说明:
(一)创建Server类
public class HelloServer {
private String sessionid;
public WebServiceContext wsContext;
public String onLogin(){
return null;
}
public String sayHello(String sessionid) {
return null;
}
}
(二)使用MyEclipse工具生成Delegate类
@javax.jws.WebService(targetNamespace = "http://ws.jax_ws.honwhy.com/", serviceName = "HelloServerService", portName = "HelloServerPort", wsdlLocation = "WEB-INF/wsdl/HelloServerService.wsdl")
public class HelloServerDelegate {
HelloServer helloServer = new HelloServer();
public String onLogin() {
return helloServer.onLogin();
}
public String sayHello(String sessionid) {
return helloServer.sayHello(sessionid);
}
}
利用MyEclipse工具生成了Delegate类之外,还生成了sun-jaxws.xml和wsdl路径下的HelloServerService_schema1.xsd和HelloServerService.wsdl文件。
(三)简单修改Delegate类和Server类,加入session部分代码
查看sun-jaxws.xml文件就可以知道HelloServerPort是由HelloServerDelegate类实现的,而在Delegate类中只是new了一个HelloServer对象,然后调用相应方法实现onLogin和sayHello的。参考网上“Web Service管理session”相关的文章,我们可以在HelloServer中加入相关代码获取session,不过本文的建议是在Delegate类中注入@Resource而不是在Server类中注入,不修改sun-jaxws.xml在Server中注入是不会成功的。
参考代码:
public class HelloServerDelegate {
@Resource
private WebServiceContext wsContext;
HelloServer helloServer = new HelloServer();
public String onLogin() {
helloServer.wsContext = this.wsContext;
return helloServer.onLogin();
}
public String sayHello(String sessionid) {
return helloServer.sayHello(sessionid);
}
}
要将wsContext传递给HelloServer,就必须在HelloServer类中新建一个WebServiceContext类型的成员变量,为了方便本文把它设置为public域的变量,且看Server类新增的代码:
public WebServiceContext wsContext;
public String onLogin(){
MessageContext mc = wsContext.getMessageContext();
HttpSession session = ((javax.servlet.http.HttpServletRequest)mc.get(MessageContext.SERVLET_REQUEST)).getSession();
if (session == null) {
throw new WebServiceException("No session in WebServiceContext");
}
sessionid = session.getId().toString();
return sessionid;
}
(四)设置session过期时间
设置session过期有两种方式可以选择,一种是在sessionid返回之前设置当前session的有效期,使用setMaxInactiveInterval方法,提供int类型的参数,单位是秒。另外一种是在web.xml中加入session-config标签,单位是分钟。
<session-config>
<session-timeout>1</session-timeout>
</session-config>
(五)在sayHello方法中加入必要的逻辑
从Client发起请求首先调用的onLogin,然后才是sayHello,从onLogin调用获得的sessionid作为调用sayHello的参数。
public String sayHello(String sessionid) {
MessageContext mc = wsContext.getMessageContext();
HttpSession session = ((javax.servlet.http.HttpServletRequest)mc.get(MessageContext.SERVLET_REQUEST)).getSession();
if (session == null) {
throw new WebServiceException("No session in WebServiceContext");
}
if(sessionid.equals(session.getId().toString())) {
System.out.println(“Hello!”);
return “OK”;
} else {
return “EXPIRED”;
}
}
(六)创建Client工程,使用工具生成Web Service需要的类
在创建Client工程前可以将Server工程运行起来,从Server工程的HelloServerService.wsdl文件中找到,这个地址会在接下来使用得到。
在Client工程中新建一个Web Service Client,填入刚才的地址加入”?WSDL”,生成Web Service所需的类。
(七)创建Client类用来发起请求与Server通信
public class HelloClient {
private static String sessionid;
public static void main(String[] args) {
HelloServerService service = new HelloServerService();
HelloServerDelegate port = service.getHelloServerPort();
// 设置保留session
((BindingProvider)port).getRequestContext().put(BindingProvider.SESSION_MAINTAIN_PROPERTY,true);
// 第一次调用onLogin获得sessionid
sessionid = port.onLogin();
while(true){
try {
// 休息超过session有效期
Thread.sleep(65000);
} catch (InterruptedException e) {
e.printStackTrace();
}
String result = port.sayHello(sessionid);
if(result.equals("OK")){
System.out.println("session is"+result);
} else {
System.out.println("session is"+result);
break;
}
}// end of while loop
System.out.println("HelloClient::end of while loop");
C. 如在html页面中获取服务器session的值
如果你是只想得到地址栏传过来的参数 可以直接在前台用JS获取:var url=window.location.search
然后去分割截取把每个参数取出来
如果你真的只想得到session的话只有在后台得到了 前台是没办法可去的 你可以定义一个全局变量在后台把session的值赋给全局变量 然后再前台用这个变量得值
D. 调用接口怎么获得session
首先在后台把user放入session里,并且也加了一个user的字段type(int类型,1-管理员/0-企业用户/2-一般用户),即user-type对象在session里。 一般我们获取对象,直接使用jstl标签里的。
Session:在计算机中,尤其是在网络应用中,称为“会话控制”。Session对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的Web页之间跳转时,存储在Session对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。
当用户请求来自应用程序的 Web页时,如果该用户还没有会话,则Web服务器将自动创建一个 Session对象。当会话过期或被放弃后,服务器将终止该会话。
Session 对象最常见的一个用法就是存储用户的首选项。例如,如果用户指明不喜欢查看图形,就可以将该信息存储在Session对象中。有关使用Session 对象的详细信息,请参阅“ASP应用程序”部分的“管理会话”。注意会话状态仅在支持cookie的浏览器中保留。
以上内容参考:网络-session
E. 如何获得服务器所有的session
一定可以的。只要你的服务器没关。那么就可以获得在线的人数。(一人对应一个session)。没错的。我以前就做了一个在线聊天系统。用到了这个。 追问: <%@ page language="java" import="java.util.*" pageEncoding="gbk"%>
<%@page import="java.net.InetAddress"%><%List<HttpSession> l=new ArrayList<HttpSession>();
if(application.getAttribute("s1")==null)
application.setAttribute("sl",l);else{l=( List<HttpSession> )application.getAttribute("sl");}session.setAttribute("u","游客");
l.add(session);
for(int i=0;i<l.size();i++){
if(l.get(i)==null){
l.remove(i);}}application.setAttribute("sl",l);
%>我这样写的 判断以前的session是否为空 为空就清除掉 回答: 是的。思路差不多就是这样的,不过。你那个判断session是否为空的可以不必要,。因为session既然在集合中。那么它就一定不为空。 追问: <%@ page language="java" import="java.util.*" pageEncoding="gbk"%>
<%@page import="java.net.InetAddress"%><%List<HttpSession> l = new ArrayList<HttpSession>();
if (application.getAttribute("sl") == null)
application.setAttribute("sl", l);else {l = (List<HttpSession>) application.getAttribute("sl");}session.setAttribute("u", "游客"); boolean x = false;
for (int i = 0; i < l.size(); i++) { if (l.get(i) == null) {
l.remove(i);} }for (int i = 0; i < l.size(); i++) { if (l.get(i).equals(session)) {x = true;break;} }if (x == false) {
F. 如何通过HttpPost从服务器上获得一个sessionid
java's Web Service is different from HttpPost, HttpGet and HttpResponse that kind of things. It is more easy to pass anything, any Object you like.
如果要利用Web Service返回一个sessionid的话,可以使用从Server返回返回值的形式,也可以在Client端实现SOAPHandler,然后在public boolean handleMessage(SOAPMessageContext context)方法中处理response的cookie,利用正则表达式获取JSESSIONID的值。
因为handleMessage每次都会首先执行,不管是request还是response过程,所以我只谈谈第一种方法,顺便对session过期也做下测试。
G. js怎么获得服务器端的session id
这种只能够再后台服务器代码里面设置一个方法,在前端Ajax请求的时候,进行返回sessionId信息了。因为不知道具体的语言所以所得比较笼统(比如:Java的话可能会说再action层写一个AJAX处理的方法;PHP不是很好说一般是controller层中写)
H. 本地vb程序如何读取本地服务器的session
建议你用ASP的Application 对象来做。
他里面有现成的监视事件
Application_OnEnd:当所有用户的 session 都结束,并且应用程序结束时,此事件发生。
Application_OnStart:在首个新的 session 被创建之前(这时 Application 对象被首次引用),此事件会发生。
Application_OnStart 事件
Application_OnStart 事件发生在第一个新的会话创建之前 (当 Application 对象第一次被引用时)。
此事件放置在 Global.asa 文件中。
注释:在 Application_OnStart 事件脚本中引用 Session、Request 或者 Response 对象会引发错误。
Application_OnEnd 事件
Application_OnEnd 事件发生在应用程序结束时 (当 web 服务器停止运行时)。
此事件放置在 Global.asa 文件中。
注释:MapPath 方法无法用于 Application_OnEnd 代码中。
语法
<scriptlanguage="vbscript"runat="server">
SubApplication_OnStart
...
EndSub
SubApplication_OnEnd
...
EndSub
</script>
实例
Global.asa:
<scriptlanguage="vbscript"runat="server">
SubApplication_OnEnd()
Application("totvisitors")=Application("visitors")
EndSub
SubApplication_OnStart
Application("visitors")=0
EndSub
SubSession_OnStart
Application.Lock
Application("visitors")=Application("visitors")+1
Application.UnLock
EndSub
SubSession_OnEnd
Application.Lock
Application("visitors")=Application("visitors")-1
Application.UnLock
EndSub
</script>
在 ASP 文件中显示当前访问者的数目:
<html>
<head>
</head>
<body>
<p>
Thereare<%response.write(Application("visitors"))%>
onlinenow!
</p>
</body>
</html>
I. 如何在服务端获取session中的值
你可以在服务器打开一个用户会话时为该用户建立session以用来保存一些用户的基本信息,或是其它的设置方面的信息,session用起来是非常方便的,但同时需要注意的是,每建立一个session变量,服务器是要为之分配相应的内存空间的,并且它的释放是有时间限制的!
J. 在express搭建的服务器里面怎么设置并获取session
这里看你怎么存放用户信息了:
express-session
在浏览器 A 上登陆用户 ua ,分配 sid1, 这时你需要将这个 sid1 与你的登陆的用户相关联, 暂时关系假设为
sid1 uida
现在浏览器B上登陆用户 ua, 这个时候又分配了 sid2, 所以你需要查找你存放的对应关系, 并更新
sid2 uida
这样如果浏览器A再访问你的网站, 这时你需要检查对应关系来判断是否已经登陆
个人理解, 没有验证. 推荐使用 redis 来存放对应关系, 这时有2个关系:
key | value
sid | userinfo
uid | sid
访问服务器, 先检查 sid 得到 uid, 然后根据 uid 来得到正确的 sid, 比较2个sid