我模仿某篇文章如下vb代码,它是一个用socket来在web上传文件的控件,一点按钮就会从
text里面读取文件,然后用socket封装成http协议的数据发送到web服务器。我现在的问题
是如何得让发过去的数据和当前页面保持同一个session,如果在我这个特例中(domino服务器)
只要设置http头种的Cookie为DomAuthSessId=7F26AF2EBAFE7CEABB06D131D83467FB",但是这个
DomAuthSessId又是如何得到呢?有什么办法是对任何web服务器都可以与当前页面保持session
一致?还有就是在web中上传文件用socket好吗,用vb的inet控件如何?因为用<FILE标签
上传文件比较多限制,一次只能选一个文件,所以
Private Sub Command1_Click()
        Me.Winsock1.RemoteHost = "127.0.0.1"
        Me.Winsock1.RemotePort = 80
        Me.Winsock1.Connect
        Me.Label1 = "Connecting..."
        DoEvents
        tmr = Timer
        Do Until Me.Winsock1.State = 7
                DoEvents
                If Timer - tmr >= 10 Then
                        MsgBox "Connection  Timeout.", vbOKOnly, "Error"
                        Me.Winsock1.Close
                        Exit Sub
                End If
        Loop
        Me.Label1 = "Ready  to  send..."
        
        strhttpheader = strhttpheader & "POST /fmUpLoadFile?OpenForm&Seq=1 HTTP/1.1" & vbCrLf
        strhttpheader = strhttpheader & "Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, */*" & vbCrLf
        strhttpheader = strhttpheader & "Referer: http://127.0.0.1/fmUpLoadFile?OpenForm" & vbCrLf
        strhttpheader = strhttpheader & "Accept-Language: zh-cn" & vbCrLf
        strhttpheader = strhttpheader & "Content-Type: multipart/form-data; boundary=---------------------------7d43b92a4302a2" & vbCrLf
        strhttpheader = strhttpheader & "Accept-Encoding: gzip, deflate" & vbCrLf
        strhttpheader = strhttpheader & "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)" & vbCrLf
        strhttpheader = strhttpheader & "Host: 10.123.78.56" & vbCrLf
        strhttpheader = strhttpheader & "Connection: Keep-Alive" & vbCrLf
        strhttpheader = strhttpheader & "Cache-Control: no-cache" & vbCrLf
        'strhttpheader = strhttpheader & "Cookie: DomAuthSessId=7F26AF2EBAFE7CEABB06D131D83467FB" & vbCrLf
        
        
        strbody = strbody & "-----------------------------7d43b92a4302a2" & vbCrLf
        strbody = strbody & "Content-Disposition: form-data; name=""__Click""" & vbCrLf
        strbody = strbody & "" & vbCrLf
        strbody = strbody & "3a5b4ec1275d80cf48256f350010c470/$Body/0.2B2" & vbCrLf
        strbody = strbody & "-----------------------------7d43b92a4302a2" & vbCrLf
        strbody = strbody & "Content-Disposition: form-data; name=""fdFolder""" & vbCrLf
        strbody = strbody & "" & vbCrLf
        strbody = strbody & "ea7aee50e949df4f48256f38002a8377" & vbCrLf
        strbody = strbody & "-----------------------------7d43b92a4302a2" & vbCrLf
        strbody = strbody & "Content-Disposition: form-data; name=""%%File3a5b4ec1275d80cf48256f350010c470.$Body.0.230""; filename=""" + Me.Text1.Text + """" & vbCrLf
        strbody = strbody & "Content-Type: text/plain" & vbCrLf
        strbody = strbody & "" & vbCrLf
        
        strbody2 = vbCrLf & "-----------------------------7d43b92a4302a2--" & vbCrLf
        
        strhttpheader = strhttpheader & "Content-Length:  " & CLng(Len(strbody) + Len(strbody2) + FileLen(Me.Text1.Text)) & vbCrLf
        strhttpheader = strhttpheader & "" & vbCrLf
        
        Me.Winsock1.SendData strhttpheader
        DoEvents        Me.Winsock1.SendData strbody
        DoEvents
        
        Me.Label1 = "Sending  file  data..."
        DoEvents
        Dim bytBuff(8191)   As Byte
        Dim bytRem()   As Byte
        
        Open Me.Text1.Text For Binary As #1
                times = Int(LOF(1) / 8192)
                ReDim bytRem(LOF(1) Mod 8192 - 1)
                For i = 1 To times
                        Get #1, , bytBuff
                        Me.Winsock1.SendData bytBuff
                        DoEvents
                Next
                Get #1, , bytRem
                Me.Winsock1.SendData bytRem
                DoEvents
        Close #1
         
        Me.Winsock1.SendData strbody2
        DoEvents
         
        Me.Label1 = "File  was  sent  successfully."
        DoEvents
        Me.Winsock1.Close
End Sub

解决方案 »

  1.   

    保持Session我现在只能在web页面onload时用javascript得到名字为DomAuthSessId
    的cookie值,然后赋值给控件,然后上传控件在http头中加入该值(其它什么iis,
    tomcat服务器也有类似的值)。但是如果用户禁止了cookies呢?服务器每次在url中
    加一个sessionid?
      

  2.   

    Session Object
    You can use the Session object to store information needed for a particular user-session. Variables stored in the Session object are not discarded when the user jumps between pages in the application; instead, these variables persist for the entire user-session. The Web server automatically creates a Session object when a Web page from the application is requested by a user who does not already have a session. The server destroys the Session object when the session expires or is abandoned. One common use for the Session object is to store user preferences. For example, if a user indicates that they prefer not to view graphics, you could store that information in the Session object. For more information on using the Session object, see Managing Sessions in the ASP Applications section.Note  Session state is only maintained for browsers that support cookies.Syntax
    Session.collection|property|method
     
    Collections
    Contents Contains the items that you have added to the session with script commands.  
    StaticObjects Contains the objects created with the <OBJECT> tag and given session scope. 
    Properties
    CodePage The codepage that will be used for symbol mapping. 
    LCID The locale identifier. 
    SessionID Returns the session identification for this user.  
    Timeout The timeout period for the session state for this application, in minutes. 
    Methods
    Abandon This method destroys a Session object and releases its resources. 
    Events 
    Scripts for the following events are declared in the global.asa file. Session_OnEnd 
    Session_OnStart 
    For more information about these events and the global.asa file, see the Global.asa Reference.Res
    You can store values in the Session object. Information stored in the Session object is available throughout the session and has session scope. The following script demonstrates storage of two types of variables.<% 
    Session("username") = "Janine"
    Session("age") = 24
    %>
     
    However, if you store an object in the Session object and use VBScript as your primary scripting language, you must use the Set keyword. This is illustrated in the following script.<% Set Session("Obj1") = Server.CreateObject("MyComponent.class1") %>
     
    You can then call the methods and properties exposed by MyComponent.class1 on subsequent Web pages, by using the following.<% Session("Obj1").MyMethod %>
     
    Or by extracting a local copy of the object and using the following.<% 
    Set MyLocalObj1 = Session("Obj1") 
    MyLocalObj1.MyObjMethod
    %>
     
    Another way to create objects with session scope is to use the <OBJECT> tags in the global.asa file. You cannot, however, store a built-in object in a Session object. For example, each of the following lines would return an error.<%
    Set Session("var1") = Session
    Set Session("var2") = Request
    Set Session("var3") = Response
    Set Session("var4") = Server
    Set Session("var5") = Application
    %>
     
    Before you store an object in the Session object, you should know what threading model it uses. Only objects ed as both can be stored in the Session object without locking the session to a single thread. For more information, seeSelecting a Threading Model inCreating Components for ASP.If you store an array in a Session object, you should not attempt to alter the elements of the stored array directly. For example, the following script will not work.<% Session("StoredArray")(3) = "new value" %>
     
    This is because the Session object is implemented as a collection. The array element StoredArray(3) does not receive the new value. Instead, the value is indexed into the collection, overwriting any information stored at that location. It is strongly recommended that if you store an array in the Session object, you retrieve a copy of the array before retrieving or changing any of the elements of the array. When you are done with the array, you should store the array in the Session object all over again so that any changes you made are saved. This is demonstrated in the following example.---file1.asp---
    <%
    'Creating and initializing the array
    Dim MyArray()
    Redim MyArray(5)
    MyArray(0) = "hello"
    MyArray(1) = "some other string"'Storing the array in the Session object
    Session("StoredArray") = MyArrayResponse.Redirect("file2.asp")
    %>---file2.asp---
    <%
    'Retrieving the array from the Session Object
    'and modifying its second element
    LocalArray = Session("StoredArray")
    LocalArray(1) = " there"'printing out the string "hello there"
    Response.Write(LocalArray(0)&LocalArray(1))'Re-storing the array in the Session object
    'This overwrites the values in StoredArray with the new values
    Session("StoredArray") = LocalArray
    %>
     
    Examples
    The following code assigns the string MyName to a session variable called name, assigns a value to a session variable called year, and assigns an instance of the some.Obj component to a variable called myObj. Session("name") = "MyName" 
    Session("year") = 96 
    Set Session("myObj") = Server.CreateObject("someObj") 
     %>