这可能是一个非常奇怪的问题,但一些提示或指导将非常有用。我们想要“会话证明”我们的网站,基本上确保两个不同的会话生成相同的链接结构(例如,用户-a和用户-b将在同一网页中获得相同的链接)。
此测试背后的原因是我们的网站是由内容管理解决方案生成的,该解决方案将为每个不同的会话生成不同的链接(URL)。修复了CMS(内部构建)以跨会话返回相同的链接。
另一个带会话校对的situation是我们的缓存机制(SQUID)一直在给我们的网站提供TCP_MISSes,这让我们认为整个网站都标记为动态,而缓存服务器必须一直重复所有物体。
答案 0 :(得分:0)
您是否尝试验证两个不同的用户确实看到相同的结构?一种方法是使用像wget这样的东西从两个不同的IP地址抓取整个网站,然后比较生成的树。
答案 1 :(得分:0)
这就是我们在amplafi.com
所做的工作(h / t见http://randomcoder.com/articles/jsessionid-considered-harmful) 在web.xml中:
<filter>
<filter-name>DisableSessionIdsInUrlFilter</filter-name>
<filter-class>
com.amplafi.web.servlet.DisableSessionIdsInUrlFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>DisableSessionIdsInUrlFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
这个java代码:
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;
import javax.servlet.http.HttpSession;
/**
* remove any session id from the Url.
*
*
* Ideally we would like to only remove this container-provided functionality
* only for public portions of the web site (that can be crawled by google)
* or for links that are to be bookmarked.
*
* @author Patrick Moore
*/
public class DisableSessionIdsInUrlFilter implements Filter {
@Override
public void destroy() {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
if (!(request instanceof HttpServletRequest)) {
chain.doFilter(request, response);
return;
}
HttpServletRequest httpRequest = (HttpServletRequest) request;
HttpServletResponse httpResponse = (HttpServletResponse) response;
/*
* Next, let's invalidate any sessions that are backed by a URL-encoded
* session id. This prevents an attacker from generating a valid link.
* Just because we won't be generating session-encoded links doesn't
* mean someone else won't try
*/
if (httpRequest.isRequestedSessionIdFromURL()) {
HttpSession session = httpRequest.getSession();
if (session != null) {
session.invalidate();
}
}
HttpServletResponseWrapper wrappedResponse = new ResponseWrapper(httpResponse);
chain.doFilter(request, wrappedResponse);
}
@Override
@SuppressWarnings("unused")
public void init(FilterConfig arg0) throws ServletException {
}
/**
* wraps response and prevense jsessionid from being encoded on the output.
*/
private static class ResponseWrapper extends HttpServletResponseWrapper {
ResponseWrapper(HttpServletResponse httpResponse) {
super(httpResponse);
}
@Override
public String encodeRedirectUrl(String uri) {
return uri;
}
@Override
public String encodeRedirectURL(String uri) {
return uri;
}
@Override
public String encodeUrl(String uri) {
return uri;
}
@Override
public String encodeURL(String uri) {
return uri;
}
}
}
答案 2 :(得分:0)
如果您网站中的每个网页都有不同的链接,那么该网站肯定会破解缓存。
您是否在询问如何验证每个会话的链接是否相同? 或者您是否在询问如何确保每个会话的链接相同?
对于前者,只需从两个不同的浏览器浏览,用户登录即可。
至于确保链接在每个会话中都相同...这取决于您指示的内部实施。
答案 3 :(得分:0)
您可以使用selenium在Java中编写测试。添加您期望的数据的断言。然后,您可以循环遍历多个登录列表,以查看每个登录的测试过程。
Selenium很容易上手,测试可以用多种语言编写。
详情请见此处:
http://seleniumhq.org/projects/remote-control/
示例测试将是这样的(伪代码):
public void setUp() throws Exception {
setUp("http://mywebsite.com", "*chrome"); // to run the test in opera replace chrome with opera
}
public void testLoginWithMultipleUsers() {
for(loop over users) {
runLogin(user)
}
}
public void runLogin(User user) throws Exception {
selenium.open("/login.htm");
assertTrue(selenium.isTextPresent("Link1"));
assertTrue(selenium.isTextPresent("2003-2008"));
selenium.open("/account");
assertTrue(selenium.isTextPresent("2003-2008"));
selenium.waitForPageToLoad("30000");
etc...
Selenium提供了许多方法来检查是否存在链接和其他页面元素,甚至可以在浏览器中记录测试 - 试一试!
答案 4 :(得分:0)
为什么您的网址不同?你在其中存储会话ID吗?
如果你是,你应该把它移到一个cookie!
答案 5 :(得分:0)
您可以尝试使用像Pureload这样的负载测试套件来模拟多个用户访问您的网站。 Pureload可以让多个并发模拟用户各自发出相同的请求,并确认结果符合预期。根据结果的动态程度,这可以帮助您测试错误。